Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 29.08.2015
Сообщений: 24

Vb net .10 и геймпад (джойстик)

09.02.2026, 16:25. Показов 549. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форуме на предмет directinput и gamеpad нашел всего несколько древних как г-но мамонта тем с неактуальными решениями. Тоже касается гугления. Такое впечатление, что на текущий момент работа с геймпадами в windows не актуальна и все давно перешли на нейроинтерфейсы
Есть информация и ссылки на реально работающие примеры по обработке кнопок с геймпадов?

Задача относительно простая - управление воспроизведением музыки при помощи кнопок геймпада. Пока приходится обходиться назначением сочетаний клавиш через joy2key, что не очень удобно.

Спасибо!

Добавлено через 2 часа 5 минут
Нашел готовое решение, консольное, реально работающее из исходника. Но на С++
Придется конвертить в VB... Или наоборот.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2026, 16:25
Ответы с готовыми решениями:

Разница между ASP.NET Core 2, ASP.NET Core MVC, ASP.NET MVC 5 и ASP.NET WEBAPI 2
Здравствуйте. Я в бекенд разработке полный ноль. В чем разница между вышеперечисленными...

Джойстик в C#
Нужно получить состояние кнопок джойстика. Немогу найти как это сделать для С#. Все чего я...

Как подключить джойстик
Здравствуйте, форумчане! Возникла необходимость написать программу на C#. Цель программы это...

6
sleep
 Аватар для I can
4934 / 4608 / 841
Регистрация: 13.04.2015
Сообщений: 9,780
09.02.2026, 17:36
Цитата Сообщение от _rat Посмотреть сообщение
реально работающее из исходника.
Он же не напрямую с джойстиком работает? Там наверняка установлен драйвер и возможно есть какая-то dll для работы с ним ?
0
3 / 3 / 0
Регистрация: 29.08.2015
Сообщений: 24
09.02.2026, 22:45  [ТС]
Напрямую, через directinput.
Но и это решение устарело. Ничего более свежего пока не нашел.

Добавлено через 4 часа 22 минуты
Нашел приблуду на гетхабе, конвертнул рабочий обработчик джоя C#->VB NET и теперь у меня есть рабочий код на VB
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
09.02.2026, 23:01
Цитата Сообщение от _rat Посмотреть сообщение
Нашел приблуду на гетхабе
Не жадничайте - делитесь ссылкой.

Цитата Сообщение от _rat Посмотреть сообщение
теперь у меня есть рабочий код на VB
Не жадничайте - делитесь кодом. Кому-то еще может пригодится.
0
3 / 3 / 0
Регистрация: 29.08.2015
Сообщений: 24
10.02.2026, 01:08  [ТС]
Конвертер. Не идеально, иногда требуются правки:
https://marketplace.visualstud... eConverter

Добавлено через 5 минут
Код, было:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using Microsoft.DirectX.DirectInput;
using System;
using System.Windows;
using System.Windows.Threading;
 
namespace WheelWpf
{
    public partial class MainWindow : Window
    {
        Device device;
        DispatcherTimer timer = new DispatcherTimer();
        private void  timer_Tick(object sender, EventArgs e)
        {
            UpdateJoystickState();
        }
        private void UpdateJoystickState()
        {
            JoystickState j = device.CurrentJoystickState;      
            string info = "";
            byte[] buttons = j.GetButtons();
            for (int i = 0; i < buttons.Length; i++)
            {
                if (buttons[i] != 0)
                {
                    info += "Button: " + i + " ";
                    Console.Beep();
                }
            }
         //   textBlock1.Text = j.ToString();
            textBlock2.Text = info;
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            foreach (DeviceInstance instance in Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly))
            {
                device = new Device(instance.ProductGuid);
                device.SetCooperativeLevel(null, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive);
                device.Acquire();
                label1.Content = device.DeviceInformation.ProductName;
                if (device.DeviceInformation.ProductName == "Arduino Micro") 
                {
                    timer.Tick += new EventHandler(timer_Tick);
                    timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
                    timer.Start();
                    break;
                 }
            }
            label1.Content = device.DeviceInformation.InstanceName;
          //  label1.Content = device.DeviceInformation.ProductName;
        }
    }
}
Стало:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Imports Microsoft.DirectX.DirectInput
Imports System
Imports System.Windows
Imports System.Windows.Threading
 
Namespace WheelWpf
    Public Partial Class MainWindow
        Inherits Window
        Private device As Device
        Private timer As DispatcherTimer = New DispatcherTimer()
        Private Sub timer_Tick(sender As Object, e As EventArgs)
            UpdateJoystickState()
        End Sub
        Private Sub UpdateJoystickState()
            Dim j = device.CurrentJoystickState
            Dim info = ""
            Dim buttons As Byte() = j.GetButtons()
            For i = 0 To buttons.Length - 1
                If buttons(i) <> 0 Then
                    info += "Button: " & i.ToString() & " "
                    Console.Beep(1000, 50)
                End If
            Next
            '   textBlock1.Text = j.ToString();
            Me.textBlock2.Text = info
            'Console.Beep(500, 500)
        End Sub
        Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
            For Each instance As DeviceInstance In Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)
                device = New Device(instance.ProductGuid)
                ''device.SetCooperativeLevel(Nothing, CooperativeLevelFlags.Background Or CooperativeLevelFlags.NonExclusive)
                device.Acquire()
                Me.label1.Content = device.DeviceInformation.ProductName
                If Equals(device.DeviceInformation.ProductName, "Arduino Micro") Then
                    AddHandler timer.Tick, New EventHandler(AddressOf timer_Tick)
                    timer.Interval = New TimeSpan(0, 0, 0, 0, 50)
                    timer.Start()
                    Exit For
                End If
            Next
            Me.label1.Content = device.DeviceInformation.InstanceName
            '  label1.Content = device.DeviceInformation.ProductName;
        End Sub
    End Class
End Namespace
Добавлено через 2 минуты
Осталось понять, как получать один EXE, без необходимости держать рядом exe.config

Добавлено через 1 час 52 минуты
Есть только один момент. Вызовы directinput как оказалось устарели. И при создании проекта в VS 2026 этот код просто так не заработает, необходимо ручками в настройках прописать использование древнего .net 4.

Добавлено через 43 секунды
app.config:
XML
1
2
3
4
5
6
<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
  </startup>
</configuration>
1
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,361
10.02.2026, 05:54
Цитата Сообщение от _rat Посмотреть сообщение
Осталось понять, как получать один EXE, без необходимости держать рядом exe.config
Сменить язык на Go, Rust, C/C++.
0
1726 / 1591 / 165
Регистрация: 25.07.2015
Сообщений: 2,667
10.02.2026, 08:09
Цитата Сообщение от Usaga Посмотреть сообщение
Сменить язык на Go, Rust, C/C++.
Да ТС только конвертировал код то ли с плюсов , то ли с шарпа, судя по его постам.
Цитата Сообщение от _rat Посмотреть сообщение
Нашел готовое решение, консольное, реально работающее из исходника. Но на С++
Придется конвертить в VB... Или наоборот.
Цитата Сообщение от _rat Посмотреть сообщение
Нашел приблуду на гетхабе, конвертнул рабочий обработчик джоя C#->VB NET и теперь у меня есть рабочий код на VB
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2026, 08:09
Помогаю со студенческими работами здесь

Построить иерархию классов: джойстик, мышь, устройство ввода, клавиатура
К каждому из классов: Джойстик, мышь, устройство ввода, клавиатура. Нужно добавить по три поля, два...

Виртуальный джойстик
Нужно сделать джойстик для управления машинкой. Как это лучше всего реализовать и есть ли готовые...

Геймпад - счетчик при нажатии на кнопку
Здравствуйте. Нужно при нажатии кнопки на геймпаде увеличивать счётчик в лейбле на одну единицу. ...

Джойстик\геймпад переназначени клавиш навсегда
Здравствуйте. Имеется пара USB gamepad`ов. Один из них Logitech rumblepad2 второй...назовем...

Джойстик\геймпад для da-15 (gameport) для windows 64 bit Совместный поиск решения
Здравствуйте. Имеется игровое устройство для игрового порта. Как известн начиная с VISTA...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru