Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 06.01.2015, 19:02   #1 (permalink)
cosmo
Новичок
 
Регистрация: 30.12.2014
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию Как программно нажать клавишу?

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

Старый 06.01.2015, 19:02
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот топики, в которых найдены совпадения с вашей темой

Сломал клавишу на eMachines D732G
Как включить Wi-Fi программно?

Старый 06.01.2015, 19:31   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Цитата:
Сообщение от cosmo Посмотреть сообщение
как сэмулировать нажатие так, чтобы работало везде?
Никак. Разные приложения могут работать с разными областями памяти и вы никак не угадаете, по какому именно адресу пишутся необходимые вам для эмуляции данные в каждом приложении.
Можно перехватывать прерывания 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 указатель на физический конец буфера
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.