Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Проблема с эмуляцией нажатия клавиш (https://forum.antichat.xyz/showthread.php?t=153006)

Markus_13 01.11.2009 23:47

Проблема с эмуляцией нажатия клавиш
 
Нужно эмулировать нажатия клавиш в игре, но никак не получается :confused:
пробовал keybd_event и PostMessage (посылка сообщений окну WM_KEYDOWN)
кто подскажет как реализовать - можно как-нибудь эмулировать на уровне драйвера? :rolleyes:
З.Ы. вместе с игрой стартует GameGuard (драйвер) - есть подозрение что он может мешает :) но без него игра не запускается...

Kaimi 01.11.2009 23:51

Может шлешь неправильно?
Цитата:

Эмуляция нажатия клавиш производилась с помощью функции 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

вот почитай

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 с лишним (причем все это из-за иконки)) - это вообще айс ;)


Время: 14:21