... пишу прогу (MASM) ... управление любым приложением с пульта TV-тюнера... ... функция -= keybd_event =- вроде работает с оконными прогами... а с полноэкранными(DirectX) ... Хрен с маслом! Что делать то?
С чего ты взял? Я не уверен что там в MASM. Я попробовал пример на VB, и там Код (Text): Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) прекрасно работает как с полноэкранными приложениями, так и с оконными. Так что с функцией все в порядке. Ищи проблемы у себя в коде.
.... проверял только с всякими проигрователями видео... а например c NFSIII не пашет в самой игре (а в меню работает!)
что то гдето и чемто это - lpDIKeyboard.SetCooperativeLevel(Wnd, DISCL_FOREGROUND or DISCL_EXCLUSIVE); в самой игре. Как обойти в данном случае не знаю. Как вариант могу подсказать, поставь PuntoSwitcher и в игре нажми что нить типа lflflf, если слышно характерный звук значит как и в нем что-то надо хукать.
... не ужели нет способа ГЛОБАЛЬНОЙ эмуляции... что бы в любом приложении на 100% типа клавишу нажал....
Вообще такого готового полно: WinLirc winlirc.sourceforge.net Girder girder.nl PC Remote Control pcremotecontrol.com Sly Control slydiman.narod.ru Если же цель именно написать самому, то думаю нужно ознакомиться с принципом работы аналогичных продуктов. WinLirc - infra red демон, (портирован из линукса) подходит для программ умеющих работать именно с ним. Girder - позволяет управлять компом через инфракрасный, последовательный, параллельный порт и даже через интернет. Умеет работать с инфракрасным портом как самостоятельно так и через WinLirc.
Пишеш драйвер или другим способом добиваешся права писать в порты 60h-64h. Там есть фича писать в буффер клавы, как-будто инфа пришла с клавиатуры. Должно работать 100%, хотя имплементировать наверное геморой...
... во ... я подозревал что както можно в буффер клавы писать... а куда свои глазки направить , чтобы не рыскать в чаще, а пойти правельным путём?
Хмм.. надо поправиться. Через порты 60h-64h пишется не в буффер клавиатуры, а в буффер контроллера который принимает сигналы от PS/2 клавиатуры. Насчет usb не знаю. Глядеть можно в google по портам 60h и 64h а также 8042 что есть номер контроллера который этим делом вроде как заправлял в древности. Надо также сказать что сам я этим занимался еще в real mode под досом. Тогда я писал в порт 64h D2h и после писал в 60h код клавиши, который вроде как по умному называется makecode. И так по байту за раз, писал, что надо, не забывая писать release code, тобиш не только нажимал кнопки, но и отпускал. Инфу по портам пожно найти в такой фиче как Ralf Brown Interrupt list пошли бог ему здоровъя. С имплементацией как я уже говорил будет геморой
А с какими флагами ты вызываешь keybd_event? Буквально недавно сталкивался с такой проблемой, надо было заставить кликать мышку в игре через определённый интервал времени, делал так: invoke mouse_event, MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, 0, 0, cbuttons, dwExtraInfo Во всех оконных работает, в игре ни в какую... и про драйвер думал и DirectInput разбирал, но решение оказалось в доску простым: invoke mouse_event, MOUSEEVENTF_LEFTDOWN, 0, 0, cbuttons, dwExtraInfo invoke Sleep, 50 invoke mouse_event, MOUSEEVENTF_LEFTUP, 0, 0, cbuttons, dwExtraInfo И всё стало работать везде... попробуй, большая вероятность, что тут ситуация аналогичная, т.к. обе функции обращаются к SendInput.
Pinkbyte сказать я ничего не хочу, я лишь констатирую факт из собственного опыта, Вы бы лучше проверили, прежде чем писать такие сообщения.