2016-06-19 30 views
0

Ich habe wirklich Mühe zu verstehen, wie PostMessage funktioniert. Ich bin von einem Web-Entwickler-Hintergrund, also ist alles sehr fremd zu mir. Ich versuche, einen einzelnen "a" Zeichen an eine Anwendung von Drittanbietern zu senden. Ich habe Spy ++ verwendet, um die PostMessage (Params unten) erforderlich zu bekommen, aber ich kann keinen Sinn machen, wie man Lparam und Wparam benutzt.Wie verwende ich diese PostMessage Lparam und Wparam?

Das ist was ich bisher habe. Ich gehe davon aus 00000041 (und die anderen von Spy ++) ist eigentlich hexadezimal und ich bin richtig darin 0x in der Schriftart davon zu setzen?

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);  

const int WM_KEYDOWN = 0x100; 
const int WM_KEYUP = 0x101; 
const Int32 WM_CHAR = 0x0102; 

PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(0x00000041), (IntPtr)(0x001E0001)); 
PostMessage(WindowHandle, WM_CHAR, (IntPtr)(0x00000061), (IntPtr)(0x001E0001)); 
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(0x00000041), (IntPtr)(0xC01E0001)); 

Das hat mir einen algorithmischen Überlauf gibt ...

Und bevor mir jemand sagt sendinput zu verwenden ist dies für ein Fenster nicht im Fokus :-P

+0

Entschuldigung sollte von angegeben werden. PostMessage (Fenstergriff, WM_KEYUP, (IntPtr) (0x00000061), (IntPtr) (0xC01E0001)); – jamie

+0

Ist '0xC01E0001' intentional,' 0xC' anstelle von '0x0' in der letzten PostMessage? – AEonAX

Antwort

1

Sie nicht senden WM_CHAR, WM_CHAR wird von der Anwendung in synthetisiert - dh die Anwendung stellt es auf sich selbst. Senden Sie entweder nur das WM_CHAR, oder senden Sie nur WM_KEYDOWN und WM_KEYUP. Wenn Sie KEYUP senden, müssen Sie eine Verzögerung haben, damit die Anwendung das WM_CHAR vor dem Senden des KEYDOWN synthetisieren kann, oder sie werden außerhalb der Reihenfolge verarbeitet. Selbst dann haben Sie ein Problem mit dem asynchronen Schlüsselzustand. Allerdings ist die lange und kurze: Es ist nicht möglich, Tastatureingabe mit PostMessage zu synthetisieren.

Hier einige Hintergrundinformationen lesen:

Ihre beste Wette ist wahrscheinlich die Anwendung t setzen o Vordergrund und verwenden Sie SendInput.