|
5 / 5 / 3
Регистрация: 30.06.2012
Сообщений: 424
|
||||||||||||
Получение скрытого метода с помощью QueryInterface12.09.2025, 09:57. Показов 3098. Ответов 6
Приветствую!
Кратко: Я пытаюсь написать программу, которая по определенному событию будет отключать мне джойстик (Xbox Series Controller), подключенный к компьютеру с помощью беспроводного адаптера от Xbox. Вот пост на стеке. Вот проект, в который я хочу встроить эту функцию. Это приложение, которое при старте Big Picture в стим автоматически меняет звуковое устройство на выбранное, а при выходе из игры меняет его обратно и отключает джойстик. Подробно: В 2024 году Майкрософт открыли документацию по GIP протоколу, по которому работает джойстик Xbox Series в том числе. Я очень долго ковырял документацию и пробовал разные подходы в коде, чтобы добиться желаемого, но к сожалению, безуспешно. Я пробовал отправлять пакеты данных с помощью libusbdotnet, пробовал получать хендл устройства и писать данные в него, пробовал имеющийся Gaming.Input апи, но он не позволяет управлять питанием джойстика. Что, в теории, нужно сделать: на джойстик отправляется определенный пакет, в котором содержится информация о типе команды и пейлод с содержанием команды. Вот пример:
В итоге я написал в поддержку майков по гип документации и вот варианты, которые они мне предложили:
Как с помощью QueryInterface можно получить это метод? Это уже выше моих знаний про C#. Я не готов писать целый драйвер, я просто хочу отключать джойстик, когда закрывается игра. Вот последняя попытка, с которой я смог добиться получения данных с джойстика. Метаданные при включении, приветствие, но писать в джойстик никак не смог, видимо, из-за проприетарного драйвера. При любой попытке писать что-то в джойстик операция проходит успешно, но данные не записываются. Кликните здесь для просмотра всего текста
PS. Предубеждая некоторые комментарии:
0
|
||||||||||||
| 12.09.2025, 09:57 | |
|
Ответы с готовыми решениями:
6
Вызов QueryInterface завершится с сбоем Авторизация на сайте с помощью скрытого Webrowser Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода |
|
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
|
|
| 12.09.2025, 16:59 | |
|
0
|
|
|
5 / 5 / 3
Регистрация: 30.06.2012
Сообщений: 424
|
|
| 12.09.2025, 17:06 [ТС] | |
|
Я ни в чем не уверен, но 0x40001CD0 я взял из репо человека, который занимается ковыряем джойстиков, взял из его статьи.
Ну и при запуске программы действительно происходит ренумерация. Джойстик по новой отдает сообщения, который должен отдавать на запуске Я в целом уже свыкся с мыслью, что весь код, приведенный мной, не может работать в принципе из-за проприетарного протокола майкрософтов. Потому я написал здесь в надежде, что мне помогут расковырять метод отключения с помощью QueryInterface
0
|
|
|
Модератор
|
||
| 14.09.2025, 13:03 | ||
|
Вам нужны специалисты по работе с COM, но на C# (да, и в .Net в целом) он используется крайне редко. Думаю вам лучше обратиться в раздел Плюсов. Если там смогут найти решение, то портировать его на C# уже не будет большой проблемой. Перенести вашу тему в Плюсы?
1
|
||
|
5 / 5 / 3
Регистрация: 30.06.2012
Сообщений: 424
|
|
| 14.09.2025, 19:27 [ТС] | |
|
Элд Хасп, если Вы считаете, что так будет лучше, то конечно. С# я занимаюсь в качестве хобби, потому могу не знать чего-то. Давайте перенесем. Спасибо.
0
|
|
|
5 / 5 / 3
Регистрация: 30.06.2012
Сообщений: 424
|
||||||
| 23.11.2025, 20:07 [ТС] | ||||||
|
Пока что я пытаюсь хоть каким-нибудь способ добиться записи команды в геймпад, чтобы его отключить. На данный момент не удалось совершить удачной записи, но есть несколько новых наблюдений, которые могут подсказать, что делать дальше.
С помощью WriteFile в С# отправил на джойстик такой пакет: 0x7E 0xED 0x82 0xC6 0x8B 0xDA 0x00 0x00 0x05 0x20 0x01 0x01 0x04, где первые 8 байт - айди джойстика, другие 5 - команда выключения. К команде я добавил паддинг нулей, чтобы пакет был 64 байта. Интересно то, что я получаю ошибки 87 Invalid parameter, что говорит мне о том, что я стучусь в верное устройство, но сама команда построена неверно. Доказательством этого служит тот факт, что при попытке изменить буквы или цифры первых 8 байтов (айди), получается ошибка 1167 Device Not Connected. Так же, если пытаться отправить команду меньше, чем 29 байт (вроде бы, уже не помню), то вылетает ошибка 122 Wrong length. Пакет в 64 байта выбран не случайно, такой объем указан в документации к GIP протоколу. Так же я пробовал отправлять команды с помощью hidapitester. Успешно открыл девайс с помощью HID-пути '\\?\HID#VID_045E&PID_0B12&IG_00#a&14e16 0f7&7&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} Но при отправке пакета выше с айди и командой выключения джойстик просто начинает вибрировать. Наверное происходит путаница, так как мне нужно отправить GIP комманду, но я делаю это по HID. Судя по докам, GIP - это протокол над HID, возможно это вызывает проблемы. Так же удалось познакомиться с челом со стека, который пилит свой софт под джойстики для хбокс. Он как раз пользуется этой прогой D4XDevice. Из-за NDA он не смог со мной поделиться полезными деталями, но скинул мне дамп wireshark, где он с помощью этой программы отключает джойстик. Как раз в дампе из вайршарк есть пакеты отключения. Интересно, что буквально в рамках секунд эта прога спамит большое количество команд на выключение. Пример первого и последнего пакета: 1131 2025-11-14 06:28:50,098304 host 1.50.4 USB 99 URB_BULK out 0000 1b 00 10 b0 fc 41 89 ab ff ff 00 00 00 00 09 00 0010 00 01 00 32 00 04 03 48 00 00 00 40 00 00 50 00 0020 00 00 00 00 00 00 00 a0 00 00 20 01 00 1f 00 00 0030 00 00 00 00 00 00 00 00 00 00 00 88 42 90 00 7e 0040 ed 8d 64 b0 ef 62 45 b5 04 6a e0 62 45 b5 04 6a 0050 e0 00 00 00 00 00 00 05 20 00 01 04 ab ff ff 00 0060 00 00 00 1395 2025-11-14 06:28:51,720058 host 1.50.4 USB 99 URB_BULK out 0000 1b 00 10 b0 fc 41 89 ab ff ff 00 00 00 00 09 00 0010 00 01 00 32 00 04 03 48 00 00 00 40 00 00 50 00 0020 00 00 00 00 00 00 00 a0 00 00 20 01 00 1f 00 00 0030 00 00 00 00 00 00 00 00 00 00 00 88 42 90 00 7e 0040 ed 8d 64 b0 ef 62 45 b5 04 6a e0 62 45 b5 04 6a 0050 e0 00 00 00 00 00 00 05 20 6b 01 04 ab ff ff 00 0060 00 00 00 Кликните здесь для просмотра всего текста
0
|
||||||
| 23.11.2025, 20:07 | |
|
Помогаю со студенческими работами здесь
7
Создание скрытого файла Создание скрытого файла Реализация скрытого режима работы приложения Вывод ValidationMessage для скрытого поля Получить значение из скрытого textBox-a Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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&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.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|