Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Проблема с эмуляцией нажатия клавиш |

01.11.2009, 23:47
|
|
Познающий
Регистрация: 19.02.2009
Сообщений: 83
Провел на форуме: 181715
Репутация:
50
|
|
Проблема с эмуляцией нажатия клавиш
Нужно эмулировать нажатия клавиш в игре, но никак не получается
пробовал keybd_event и PostMessage (посылка сообщений окну WM_KEYDOWN)
кто подскажет как реализовать - можно как-нибудь эмулировать на уровне драйвера?
З.Ы. вместе с игрой стартует GameGuard (драйвер) - есть подозрение что он может мешает  но без него игра не запускается...
|
|
|

01.11.2009, 23:51
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Может шлешь неправильно?
Эмуляция нажатия клавиш производилась с помощью функции SendInput. Отмечу, что для того, чтобы ввод работал и в приложениях DirectX, которые используют DirectInput, необходимо отсылать не виртуальные коды клавиш, а скан-коды. Чтобы получить скан-код клавиши по виртуальному коду, необходимо воспользоваться функцией MapVirtualKey.
Есть еще функция keybd_event для эмуляции ввода с клавиатуры, но она устаревшая и является просто переходником к SendInput.
(c) d_x
|
|
|

02.11.2009, 00:05
|
|
Познающий
Регистрация: 19.02.2009
Сообщений: 83
Провел на форуме: 181715
Репутация:
50
|
|
текущий код:
раньше было с 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);
...
|
|
|

02.11.2009, 03:48
|
|
Познающий
Регистрация: 19.02.2009
Сообщений: 83
Провел на форуме: 181715
Репутация:
50
|
|
ну, неужели никто не подскажет что не так?((
|
|
|

02.12.2009, 01:53
|
|
Познающий
Регистрация: 19.02.2009
Сообщений: 83
Провел на форуме: 181715
Репутация:
50
|
|
gisTy, если конструктивного ничего сказать не можешь \ не хочешь - лучше молчи =)
Проблема кстати попрежнему не решена, приоритет уже не тот - но всеже интересно в чем там дело
З.Ы. это не ла2 - это Aion 
|
|
|

09.12.2009, 12:03
|
|
Banned
Регистрация: 03.11.2009
Сообщений: 112
Провел на форуме: 98006
Репутация:
17
|
|
|
|
|

19.12.2009, 19:41
|
|
Познающий
Регистрация: 19.02.2009
Сообщений: 83
Провел на форуме: 181715
Репутация:
50
|
|
2 DeaD_MoroZ
почитал.
Спасибо. Но я сделал по своему, и у меня один вопрос:как сделать что бы полностью заблокировать функцию кнопки(программа при нажатии home печатает "привет" и при повторном переходит в начало строки и опять печатает "привет")
Мож кому надо--> http://slil.ru/28295384 пароль:serega
Угу, скопипастил код (причем неразобравшись в нем) и пытаешься мне помочь - лучше бы себе помог))
хотя конечн желание помочь очень похвально
в твоем (или чужом) коде юзается keybd_event (юнит sendkeys), а как ты можешь прочитать выше, я уже пробовал этот вариант
З.З.Ы. а насчет "как сделать что бы полностью заблокировать функцию кнопки" - легко, если ты понимешь код, а конкретно нужно добавить строку
Код:
if wparam=vk_home then exit else
перед строкой
Код:
Result:=CallNextHookEx(HookHandle, code, WParam, LParam);
после этого нажатие хоума обрабатываться не будет, а будут только слаться твои клавиши "GHBDTN"
З.З.З.Ы. код вообще лажовый - много мусора и абсолютно бесполезного кода, а уж res-файл в 260кб и dfm в 500 с лишним (причем все это из-за иконки)) - это вообще айс 
Последний раз редактировалось Markus_13; 19.12.2009 в 19:44..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|