Hi!
Ich versuche gerade mit PostMessage einen tastendruck emulieren zu lassen.
Ich weiss dass es damit geht weil ein Kumpel es in C++ damit gemacht hat.
Der untenstehende Code ist im grunde genommen die übersetzung seines C++ Codes in VB.net code aber irgendwie funktioniert das nicht so wie es soll..
Es kommt kein Compiler Fehler und auch keine Exception wenn die funktion aufgerufen wird aber es passiert einfach nichts ...
laut unseren tests sind die werte die in den Variablen "lparam" und "KEY" richtig, ein richtiges handle zum richtigen fenster hab ich auch und WM_KEYDOWN bzw. WM_KEYUP sind richtig.
Hier mal der Code:
Sieht jemand meinen fehler?? wie gesagt in C++ funktionierts... Zum vergleich der funktionierende C++ Code:
Danke im voraus für Jede antwort
lg
Leonor
Ich versuche gerade mit PostMessage einen tastendruck emulieren zu lassen.
Ich weiss dass es damit geht weil ein Kumpel es in C++ damit gemacht hat.
Der untenstehende Code ist im grunde genommen die übersetzung seines C++ Codes in VB.net code aber irgendwie funktioniert das nicht so wie es soll..
Es kommt kein Compiler Fehler und auch keine Exception wenn die funktion aufgerufen wird aber es passiert einfach nichts ...
laut unseren tests sind die werte die in den Variablen "lparam" und "KEY" richtig, ein richtiges handle zum richtigen fenster hab ich auch und WM_KEYDOWN bzw. WM_KEYUP sind richtig.
Hier mal der Code:
Code:
Module Memory Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal uCode As UInteger, ByVal uMapType As UInteger) As UInteger Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Const WM_KEYDOWN As Long = &H100 Private Const WM_KEYUP As Long = &H101 Public Function SendKey(ByVal WindowTitle As String, ByVal KEY As ULong) Dim handle As Long = FindWindow(vbNullString, WindowTitle) 'Fensterhandle bekommen Dim scan As UInteger Dim lparam As Long scan = MapVirtualKey(KEY, 0) 'Den Virtual Key Code in einen Scan Code übersetzen Dim lpArg2 As Long = scan * 65536 'Bitweise linksverschiebung um 16 lparam = &H1 Or lpArg2 'Bitweise oder verknüpfung mit 0x1 If handle = 0 Then 'Kein handle bekommen MessageBox.Show("Can't find Findow!\nCheck if the Window exists!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If 'Den Key senden PostMessage(handle, WM_KEYDOWN, KEY, lparam) System.Threading.Thread.Sleep(1000) PostMessage(handle, WM_KEYUP, KEY, lparam) End Function End Module
Code:
void SendKey(HWND handle,DWORD KEY) { UINT scan; LPARAM lparam; scan = MapVirtualKey( KEY, 0 ); lparam = 0x00000001 | (LPARAM)( scan << 16 ); PostMessage(handle, WM_KEYDOWN, KEY, lparam); Sleep(1000); PostMessage(handle, WM_KEYUP, KEY, lparam); }
lg
Leonor
Comment