Просмотр полной версии : Проблема с эмуляцией нажатия клавиш
Markus_13
01.11.2009, 23:47
Нужно эмулировать нажатия клавиш в игре, но никак не получается :confused:
пробовал keybd_event и PostMessage (посылка сообщений окну WM_KEYDOWN)
кто подскажет как реализовать - можно как-нибудь эмулировать на уровне драйвера? :rolleyes:
З.Ы. вместе с игрой стартует GameGuard (драйвер) - есть подозрение что он может мешает :) но без него игра не запускается...
Может шлешь неправильно?
Эмуляция нажатия клавиш производилась с помощью функции SendInput. Отмечу, что для того, чтобы ввод работал и в приложениях DirectX, которые используют DirectInput, необходимо отсылать не виртуальные коды клавиш, а скан-коды. Чтобы получить скан-код клавиши по виртуальному коду, необходимо воспользоваться функцией MapVirtualKey.
Есть еще функция keybd_event для эмуляции ввода с клавиатуры, но она устаревшая и является просто переходником к SendInput.
(c) d_x
Markus_13
02.11.2009, 00:05
текущий код:
раньше было с keybd_event
procedure KeyD(key:byte;lp:integer=0);begin PostMessage(a,$0100,key,lp);end;
procedure KeyU(key:byte;lp:integer=0);begin PostMessage(a,$0101,key,lp);end;
...
lpCtrl1:=MapVirtualKey(17,0) shl 16 or 1 ;
lpV1:=MapVirtualKey(ord('V'),0) shl 16 or 1 ;
lpV2:=1 shl 31 or 1 shl 30 or MapVirtualKey(ord('V'),0) shl 16 or 1 ;
lpCtrl2:=1 shl 31 or 1 shl 30 or MapVirtualKey(17,0) shl 16 or 1 ;
...
keyD(17,lpCtrl1);
keyD(17,lpV1);
keyU(17,lpV2);
keyU(17,lpCtrl2);
...
Markus_13
02.11.2009, 03:48
ну, неужели никто не подскажет что не так?((
Markus_13
02.12.2009, 01:53
gisTy, если конструктивного ничего сказать не можешь \ не хочешь - лучше молчи =)
Проблема кстати попрежнему не решена, приоритет уже не тот - но всеже интересно в чем там дело :confused:
З.Ы. это не ла2 - это Aion ;)
DeaD_MoroZ
09.12.2009, 12:03
вот почитай (http://forum.antichat.ru/thread160891.html)
Markus_13
19.12.2009, 19:41
2 DeaD_MoroZ
вот почитай
почитал.
Спасибо. Но я сделал по своему, и у меня один вопрос:как сделать что бы полностью заблокировать функцию кнопки(программа при нажатии home печатает "привет" и при повторном переходит в начало строки и опять печатает "привет")
Мож кому надо--> http://slil.ru/28295384 пароль:serega
Угу, скопипастил код (причем неразобравшись в нем) и пытаешься мне помочь - лучше бы себе помог))
хотя конечн желание помочь очень похвально :D
в твоем (или чужом) коде юзается keybd_event (юнит sendkeys), а как ты можешь прочитать выше, я уже пробовал этот вариант
З.З.Ы. а насчет "как сделать что бы полностью заблокировать функцию кнопки" - легко, если ты понимешь код, а конкретно нужно добавить строку
if wparam=vk_home then exit else
перед строкой
Result:=CallNextHookEx(HookHandle, code, WParam, LParam);
после этого нажатие хоума обрабатываться не будет, а будут только слаться твои клавиши "GHBDTN"
З.З.З.Ы. код вообще лажовый - много мусора и абсолютно бесполезного кода, а уж res-файл в 260кб и dfm в 500 с лишним (причем все это из-за иконки)) - это вообще айс ;)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot