• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Как программно нажать клавишу?

  • Автор темы Автор темы cosmo
  • Дата начала Дата начала

cosmo

Ученик
Регистрация
30 Дек 2014
Сообщения
2
Реакции
1
Баллы
0
Как программно нажать клавишу?

Доброго времени суток. Мне нужно программно нажать клавишу на клавиатуре. Пишу на Delphi, могу на ассемблере немного. Суть в том, что я пробовал через keybrd _ event, пробовал функции sendinput и sendkeys. Все работает, но далеко не во всех программах. Например, в играх никакого эффекта нет. А мне нужно, чтобы работало в эмуляторе NES (FCE Ultra). Как я понимаю, эти программы берут код клавиши непосредственно из буфера клавиатуры, но ХР не позволяет туда записывать данные. Кто-нибудь знает, как сэмулировать нажатие так, чтобы работало везде?
 
как сэмулировать нажатие так, чтобы работало везде?
Никак. Разные приложения могут работать с разными областями памяти и вы никак не угадаете, по какому именно адресу пишутся необходимые вам для эмуляции данные в каждом приложении.
Можно перехватывать прерывания Int 16h (INT 16h выбирает данные из буфера и передает их прикладной программе) и использовать специальные функции для работы с буфером клавиатуры (прерывание Int 21h). Вот ссылки по теме: http://www.frolov-lib.ru/books/bsp/v33/ch2_4.htm http://www.tdoc.ru/c/programming/assembler/assembler-programming-keyboard-page2.html Почитайте, там есть примеры на ассемблере.
чтение буфера клавиатуры по адресам
0040:001Ah указатель на логическое начало буфера
0040:001Ch указатель на логический конец буфера
0040:001Eh память для хранения ASCII/скан-кодов начало
0040:003Eh конец буфера
0040:0080h указатель на физическое начало буфера
0040:0082h указатель на физический конец буфера
 
Назад
Сверху