2017-10-18 5 views
0

Ich hoffe, eine linke Maustaste zu simulieren, klicken Sie auf ein anderes Fenster, und halten Sie die Taste für etwa 2 Sekunden. Ich habe den folgenden Code versucht:Wie simuliert man die Maustaste gedrückt und gehalten in C#

 int WM_LBUTTONDOWN = 0x0201; 
     int WM_LBUTTONUP = 0x0202; 
     SendMessage(hd, WM_LBUTTONDOWN, new IntPtr(1), lParam);   
     Thread.Sleep(2000); 
     SendMessage(hd, WM_LBUTTONUP, new IntPtr(1), lParam); 

Der Parameter „hd“ ist der Handgriff von einem anderen Fenster und „lParam“ enthält Informationen Benutzer koordinieren. Aber es hat nicht so funktioniert wie ich es erwartet habe. Ich habe einen Breakpoint benutzt, um den Code zu debuggen. Wenn die Nachricht "WM_LBUTTONDOWN" an ein anderes Fenster gesendet wurde, wurde der Druckknopf in einem anderen Fenster sofort angeklickt, statt gehalten zu werden und auf die Nachricht "WM_LBUTTONUP" zu warten.

Wenn ich mit der Maus die Taste gedrückt und gedrückt gehalten habe, hat spy ++ gezeigt, dass es zwischen "WM_LBUTTONDOWN" und "WM_LBUTTONUP" keine anderen Nachrichten außer "WM_MOUSEMOVE" gibt. Picture of Spy++ showed

Also, wie man Maustaste simuliert und in C# gehalten wird? Jeder Rat wäre hilfreich, danke!

+2

[Sie können keine Tastatureingabe mit PostMessage simulieren] (https://blogs.msdn.microsoft.com/oldnewthing/20050530-11/?p=35513). – IInspectable

+1

Eine ziemlich seltsame Sache zu tun ... warum? – DonBoitnott

+0

@DonBoitnott Ich möchte Mausklick auf einen Android-Simulator simulieren, um ein Android-Netzspiel automatisch zu spielen. Aber das Spiel würde messen, wie viel Zeit der Druckknopf im Spiel gehalten wird, um zu beurteilen, ob es Mensch ist, das Spiel spielend. Mensch benutzen Finger oder Maus, um einen Knopf zu klicken, brauchen ungefähr 100 Ms, während eine Software, die das Klicken simuliert, nur 2 Ms kostet. – Alleria

Antwort

0

"mouse_event" API-Funktion kann das Problem lösen.Aber der Nebeneffekt ist die Maus Poiter wird tatsächlich bewegen, wenn das Programm ausgeführt wird, können Sie nicht Ihre Maus bewegen oder unerwartete falsche Position würde geklickt werden.

+0

Sie können 'mouse_event' (oder' SendInput') nicht verwenden, um auf ein bestimmtes Fenster zu zielen. Die Eingabe geht immer in das Vordergrundfenster. – IInspectable

Verwandte Themen