WM_KEYDOWN Parameter
-
Hallo,
Ich möchte in einem Fenster eine Taste drücken.
Dazu send ich dem Fenster eine WM_KEYDOWN Message, mit der Methode SendMessage.LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
Also: SendMessage(WM_KEYDOWN);
Nun meine Frage:
Wenn ich nun z.B. ein "a" simulieren will, was muss ich dann als Parameter angeben?
SendMessage(WM_KEYDOWN,"a"), klappt nähmlich nicht.Gruß Stu
-
Vermutlich solltest du dort keinen String, sondern einen char ('a') übergeben. Und außerdem brauchst du noch die passende WM_KEYUP-Message
-
Hallo,
ich hab das mal so gemacht:// in die .h virtual BOOL PreTranslateMessage(MSG* pMsg ); // und in die .cpp BOOL CMyClass::PreTranslateMessage(MSG* pMsg ) { CString msg; if(pMsg->message==WM_KEYDOWN) { //if(pMsg->wParam == VK_DELETE) if(pMsg->wParam == 0x41) // 0x41 ist das 'A' { if(IDYES == AfxMessageBox(L"Löschen Ergebnisse?!", MB_YESNO)) { OnClear(); msg.Format(L"pMsg: %f", pMsg->message); AfxMessageBox(msg); } } } return CDialog::PreTranslateMessage(pMsg); }
Aber es ist besser du sagts gleich was Du machen möchtest, es gibt bessere Lösungen "vieleicht"!
grüsse
pixel
-
Also ich möchte einen Fenster was nicht im Fokus ist, eine Keydown message senden.
Also ich möchte diese Message Generieren.
Aber auch diese Variante scheint nicht zu gehen.
GetWindow(x)->SendMessage(WM_KEYDOWN, 'a');
Sleep(100);
GetWindow(x)->SendMessage(WM_KEYUP, 'a');
-
Ich sagte ja, es gibt bessere Lösungen!
pixel
-
Vermutlich mußt du auch noch den lParam von WM_KEYDOWN und WM_KEYUP richtig belegen. (für WM_KEYUP müssen die Bits 30 und 31 auf jeden Fall gesetzt werden)
PS: Übrigens ist "geht nicht" eine äußerst aussagekräfitge Fehlerbeschreibung - wenn man mit einem Hellseher redet