Технический форум

Технический форум (http://www.tehnari.ru/index.php)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/forumdisplay.php?f=43)
-   -   Как программно нажать клавишу? (http://www.tehnari.ru/showthread.php?t=100433)

cosmo 06.01.2015 19:02

Как программно нажать клавишу?
 
Доброго времени суток. Мне нужно программно нажать клавишу на клавиатуре. Пишу на Delphi, могу на ассемблере немного. Суть в том, что я пробовал через keybrd _ event, пробовал функции sendinput и sendkeys. Все работает, но далеко не во всех программах. Например, в играх никакого эффекта нет. А мне нужно, чтобы работало в эмуляторе NES (FCE Ultra). Как я понимаю, эти программы берут код клавиши непосредственно из буфера клавиатуры, но ХР не позволяет туда записывать данные. Кто-нибудь знает, как сэмулировать нажатие так, чтобы работало везде?

AlexZir 06.01.2015 19:31

Цитата:

Сообщение от cosmo (Сообщение 1093661)
как сэмулировать нажатие так, чтобы работало везде?

Никак. Разные приложения могут работать с разными областями памяти и вы никак не угадаете, по какому именно адресу пишутся необходимые вам для эмуляции данные в каждом приложении.
Можно перехватывать прерывания Int 16h (INT 16h выбирает данные из буфера и передает их прикладной программе) и использовать специальные функции для работы с буфером клавиатуры (прерывание Int 21h). Вот ссылки по теме: http://www.frolov-lib.ru/books/bsp/v33/ch2_4.htm http://www.tdoc.ru/c/programming/ass...ard-page2.html Почитайте, там есть примеры на ассемблере.
Цитата:

чтение буфера клавиатуры по адресам
0040:001Ah указатель на логическое начало буфера
0040:001Ch указатель на логический конец буфера
0040:001Eh память для хранения ASCII/скан-кодов начало
0040:003Eh конец буфера
0040:0080h указатель на физическое начало буфера
0040:0082h указатель на физический конец буфера


Часовой пояс GMT +4, время: 15:37.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.