Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

gra(directx) nie reaguje na keybd_event

Ostatnio zmodyfikowano 2015-06-06 20:33
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
gra(directx) nie reaguje na keybd_event
» 2015-05-30 23:20:18
Witajcie, potrzebuję pomocy w rozkminieniu jednej rzeczy.
Dla zabawy piszę sobie projekt do sterowania grą Hugo, chcę w niej wywoływać naciśnięcia klawiszy. Jednak pomimo, że samo symulowanie klawiszy to rzecz prosta, to nie wiedzieć czemu, Hugo nie chce na nie reagować.

Zarówno gdy wciśnięcie klawisza symuluję za pomocą keybd_event:
C/C++
keybd_event( VK_LEFT, 0, 0, 0 );
keybd_event( VK_LEFT, 0, KEYEVENTF_KEYUP, 0 );

jak również gdy wysyłam to za pomocą SendInput:
C/C++
INPUT ip;

ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = VK_RIGHT;

ip.ki.dwFlags = 0;
SendInput( 1, & ip, sizeof( INPUT ) );

ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, & ip, sizeof( INPUT ) );

Oraz SendMessage:
C/C++
SendMessage( hwnd, WM_KEYDOWN, VK_RIGHT, 0 );
SendMessage( hwnd, WM_KEYUP, VK_RIGHT, 0 );

W we wszystkich powyższych przypadkach, w notatniku, karetka(kursor) poprawnie zaczyna się przemieszczać, ale gra Hugo wciąż nie reaguje.

Próbowałem też różnych czasów opóźnienia pomiędzy wciśnięciem a odpuszczeniem klawisza(za pomocą zwykłego Sleepa), też nie pomogło.

Sprawdziłem za pomocą GetForegroundWindow oraz GetClassName, że poprawnie mój Hugo jest na pierwszym planie. Wywołanie na siłę SetFocus oraz SetActiveWindow też nic nie zmieniło.

Co do samego Hugo to nie wiem co mogę o nim powiedzieć, niewiele o nim wiem, więc podzielę się wszystkim co wiem na pewno: jest to gra leciwa, otwiera się w full screenie, folder DIRECTX sugeruje, że została napisana przy pomocy DIRECTXa i to w zasadzie tyle ile potrafię o niej powiedzieć.

Na chwilę obecną skończyły mi się pomysły, co jeszcze spróbować, żeby te wciśnięcia klawiszy do niej leciały. Przychodzi Wam coś do głowy?
P-133003
DejaVu
» 2015-06-06 20:33:27
Na Windows XP zapewne by to zadziałało, ale nowsze systemy są chyba nieco bardziej odporne na wysyłanie komunikatów do innych procesów. Zamykam - ingerencja w aplikacje trzecie.
P-133269
« 1 »
  Strona 1 z 1