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

Symulowanie klawiatury

Ostatnio zmodyfikowano 2015-08-12 00:21
Autor Wiadomość
MonoMisiek
Temat założony przez niniejszego użytkownika
Symulowanie klawiatury
» 2015-08-11 16:34:16
W internecie jest cała masa poradników, ale one nie do końca działają. Tz działają w notatniki, przeglądarce itp, ale jak np włączę grę to już nie... [Myszka o dziwo działa (SetCursorPos)]
Próbowałem używać
SendInput
keybd_event

Próbowałem jeszcze SendMessage, ale to bardzo dziwnie działa.
[C++]
HWND hWnd = FindWindow(0, "Dropbox");
SendMessage(hwnd, WM_KEYDOWN, 0x44, 0);
SendMessage(hwnd, WM_KEYUP, 0x44, 0);
[/C++]
W ten sposób działa, ale problem w tym, że przerzuca mnie do okna dropbox.
Chcę, żeby to działało wszędzie i bez przerzucania

[C++]
//HWND hwnd = ::GetForegroundWindow();//tak nie wyskakuje null, ale i tak nie działa
HWND hwnd =  ::GetActiveWindow();
SendMessage(hwnd, WM_KEYDOWN, 0x44, 0);
SendMessage(hwnd, WM_KEYUP, 0x44, 0);
if (hwnd == NULL)
{
printf("null");
}
[/C++]
wypisuje null...

Jak zrobić żeby to zaczęło działać?
P-136071
SocrateZ
» 2015-08-12 00:21:50
Jak zrobić żeby to działało?
Hmm... jeżeli już wysyłasz komunikaty, to z głową...
Zastosuj się do wzorca (lParam):
WM_KEYUP
WM_KEYDOWN

Tym bardziej jeżeli później komunikat przesyłasz dalej funkcją DefWndProc.

PS:
W ten sposób działa, ale problem w tym, że przerzuca mnie do okna dropbox.
To normalne... po kliknięciu w okno, zostaje ono aktywowane.
Wyślij dodatkowo wiadomość o deaktywacji okna: WM_ACTIVATE do Dropboxa i aktywuj okno swojej aplikacji. Może być zauważalne mignięcie.

Możesz również zobaczyć na to: http://stackoverflow.com​/questions/18662031​/avoid-application-activation-and-focus-in-when-clicking-buttons-on-it-windows
P-136085
« 1 »
  Strona 1 z 1