Tastendruck 'simulieren' per Windowsmessage

GartenUmgraben

Erfahrenes Mitglied
Moin... Ich hab ein Textfeld mit ner menge Text drin und einen Button. Wenn ich auf den Button klicke, dann soll der Cursor eine Reihe nach unten wandern. Soll heissen es soll das gleiche passieren, als wenn ich auf der Tastatur die Pfeiltaste-NACH UNTEN drücke.

Per WindowsMessage kann man ja diesen PfeilTasteNachUnten Event auslösen, sprich meiner Anwendung/Windows vorgaukeln ich hätte die Taste auf der Tastatur gedrückt

Müsste irgendwieso aussehen

Code:
private int WM_SYSKEYDOWN   = 0x0104;
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessageA")]


ButtonGedrücktEvent  bla bla
{

System.Windows.Forms.Message.Create(textbox.Handle, WM_SYSKEYDOWN, Keys.Up.GetTypeCode , 0);

}


Allerdings funktioniert das nicht so recht. Weiss jmd wie gnau man es machen muss ?
Das mit der Textbox ist nur ein Beispiel. Ich will im Grunde wissen wie ich diese TasteGedrücktDingens an Windows senden kann.
 
Versuch mal
C#:
[DllImport( "User32.dll" )]
static extern bool SendMessage( IntPtr hwnd, UInt32 msg, UInt32 wParam, UInt32 lParam );

int WM_SYSKEYDOWN = 0x0104;

void button1_Click( object sender, System.EventArgs e ) {
    SendMessage( this.Handle, WM_SYSKEYDOWN, Keys.Up.ToInt64(), 0 );
}
Ungestet sollte aber so gehen...
 
Naja wenn man den Code ein wenig angleicht (weil hat ein paar kompilerfehler gebracht) und ausführt


dann kommt


Ein Aufruf an die PInvoke-Funktion ".....:SendMessage" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.


Code:
[DllImport( "User32.dll" )]
static extern bool SendMessage( IntPtr hwnd, int  msg, UInt64 wParam, int lParam );

 int WM_SYSKEYDOWN = 0x0104;

 void button1_Click( object sender, System.EventArgs e )
 {
 SendMessage( this.Handle, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.Up), 0 );
 }
 

Neue Beiträge

Zurück