Keystroke an Outlook senden schlägt fehl
-
Hallo Forenjunkys

Jetzt wo das Forum wieder steht muss ich dringend eine Frage loswerden.
Ich versuche Outlook eine Tastenkombination und zwar "Alt+x" zu senden.Leider kommt diese nie an. Hier mein Versuch aus meiner MFC-Anwendung heraus.
CWnd* outlook=FindWindow(NULL,"Outlook Heute - Microsoft Outlook"); outlook->SendMessage(WM_SYSKEYDOWN,VK_LMENU,0); outlook->SendMessage(WM_SYSKEYUP,VK_LMENU,0);Was mache ich da nur falsch? Sogar wenn ich es mit calc.exe versuche.
Also dem Taschenrechner, dann kommt mein "Alt" dort nicht an.
-
Verwende SendInput!
Das senden der WM_SYSKEYDOWN Nachrichten ist nicht zuverlässig.
-
SendInput kannte ich bislang noch nicht.
Auch wenn ich windows.h include ist bei mir INPUT unbekannt.
Das Vorgehen wäre doch in etwa so oder?

INPUT Input; Input.type = INPUT_KEYBOARD; Input.ki.dwFlags = KEYEVENTF_EXTENDEDKEY; Input.ki.wVk = VK_LMENU; SendInput(1, &Input, sizeof(Input));Was zu einem Haufen Fehler führt. INPUT ist nicht bekannt.
Ich mache irgendwas falsch, finde aber keine Beispiele zu SendInput
und vor allem, wie man das auf mein CWnd anwendet (geschweige denn das ('x')
mit sendet.
-
Hast Du VC6? Dann hast Du auch vermutlich kein aktuelles SDK.
Du kannst auch keybd_event verwenden.
-
Hi Martin,
ich habe MSVS2003. Kann man denn keybd_event auch gezielt auf eine Anwendung
loslassen? Dachte immer das ginge damit nur systemweit?
-
Nein! Das liegt daran wie Windows die I/O Queues verwaltet. Die entsprechenden aktiven Programme bekommt dann den Input.
Wie sollte es auch anders gehen Die Sequenz A,ALT+TAB,B sendet A an das aktive Programm und B an das nächste Programm. (Up/Down Probleme seien hier mal nicht beachtet).Das problem ist das WM_KEYDOWN Nachrichten eben entsprechend in die Queue gestellt werden, aber diese eben Folgenachrichten erzeugen. Man kann zuverlässig Tastatureingaben nur über keybd_event und SendInput erzeugen.
-
Ich muss also entsprechend das Fenster immer als aktives Fenster
nach vorne holen. Richtig?
-
Vordergund muss nicht sein. Es muss den entsprechenden Eingabefocus haben!
Das hängt aber meistens miteinander zusammen.