Форум Emu-Land.net
06 Сентября 2010, 13:53:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Правила форума
   
   Начало   Сайт Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: WinAPI не действует на эмуляторы?  (Прочитано 199 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AjaxVS

Offline Offline

Откуда: Donetsk
Сообщений: 118



Просмотр профиля WWW
« : 22 Марта 2010, 15:16:17 »

Столкнулся с такой проблемой - не могу симитировать нажатие клавиш для эмуляторов с помощью WinAPI32.
Тестировал Gens+, Gens32, Fusion, FCEUltra - эффекта нет, картина одна и та же.
Система - WinXP. Окна эмуляторов на момент имитации имели фокус, были активными.

Вот как я пробовал (код на VB, но это не важно) нажимать кнопку "A" (соотв. клавиша "A" на клавитуре во всех эмулях)..
Для начала посмотрел в MSSpy мессаджи, которые происходят при реальном нажатии  - см. рисунок:
http://i180.photobucket.com/albums/x246/AjaxVS/MSSpy_Emu_messages.png
Потом начал имитировать нажатия с помощью WinApi. все безрезультано:


Что самое непонятное - имитации F5-F6-F7 (сохранения-слоты на 16bit) вроде как и происходит, но непонятно чего. в Gens32 срабатывает сохранение/загрузка(F6-F7, хотя должны быть слоты), в Gens+ включается турбо-режим(он у меня вообще на клавише "C"!), в Fusion не происходит ничего. в общем, творится не понятно что, но явно не то, что нужно.
F8 - загрузка - в Gens32 имитируется правильно (!)
Пробовал назначить кнопке A другие клавиши (F1-F4, Shift) - имитаций не происходит.

В общем: вопросы:
1. почему "глобальная" имитация с помощью keybd_event не срабатывает?
2. как с помощью WinAPI (какие wParam/lParam) имитировать нажатия кнопок в эмуляторах 8-16 bit?

Кто что знает - поделитесь инфой.
Записан
r57shell

Offline Offline

Сообщений: 630



Просмотр профиля
« Ответ #1 : 22 Марта 2010, 17:31:10 »

Есть предположение что эмули юзают DirectIntput / Open(непомню 2 буквы) по этому косяг . А так... посмотри исходники. Скажу одно - хоткеи типо F5,F6 в Gens должны работать (потому что сейчас улучшаю исходники там используется TranlsateAccelerator(...)). Может не на то окно месаги шлёшь?) Короче когда доделаю тут одну вещь, посмотрю (но только Gens).
Записан

MaxplantMC

Offline Offline

Сообщений: 36


Просмотр профиля
« Ответ #2 : 22 Марта 2010, 17:31:38 »

Не знаю ка Бэсике. В дельфи делается так
Код:
-----------------
implementation
const
  ExtendedKeys: set of Byte = [  // incomplete list
    VK_INSERT, VK_DELETE, VK_HOME,   VK_END,    VK_PRIOR,   VK_NEXT,
    VK_LEFT,   VK_UP,     VK_RIGHT,  VK_DOWN,   VK_NUMLOCK
  ];
------------------


procedure SimulateKeyDown(Key : byte);
var
  flags: DWORD;
begin
  if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
  keybd_event(Key, MapVirtualKey(Key, 0), flags, 0);
end;

procedure SimulateKeyUp(Key : byte);  
var
  flags: DWORD;
begin
  if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
  keybd_event(Key, MapVirtualKey(Key, 0), KEYEVENTF_KEYUP or flags, 0);
end;

----------------------

SimulateKeyDown(Key);
sleep(100);
SimulateKeyUp(Key);

используя keybd_event нужно обязательно передавать ScanCode.
и вместо keybd_event лучше использовать sendinput
Записан
AjaxVS

Offline Offline

Откуда: Donetsk
Сообщений: 118



Просмотр профиля WWW
« Ответ #3 : 22 Марта 2010, 17:53:42 »

Есть предположение что эмули юзают DirectIntput
да вроде и имитировал уже проги с директами всякими.. никогда с такими "перенаправлениями" не сталкивался.

Не знаю ка Бэсике. В дельфи делается так

MapVirtualKeys - как все просто то!
спасибо, теперь все работает замечательно! 
Записан
MaxplantMC

Offline Offline

Сообщений: 36


Просмотр профиля
« Ответ #4 : 23 Марта 2010, 04:53:31 »

а стоит ли делать эмулятор клавиш для эмулятора? масло-маслено получается как-то.
да и лучше велосипед не изобретать а использовать проги аналогичные MouseRobot.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
Mail.ru