2017-06-08 3 views
-2

Ich weiß, es gibt eine Menge Fragen wie diese. Aber jede Antwort, die ich gelesen habe, hat mir nicht geholfen. Also frage ich hier.Wie wird ein Doppelklick ausgeführt?

Ich möchte einen Mausklick ausführen. Davor habe ich bereits den Cursor an die richtige Position gesetzt:

Cursor.Position = new System.Drawing.Point(2225, 154); 

ich schon fast jede Klasse verwendet ich hier gefunden habe, und niemand hat mir geholfen. (Der Cursor wurde gesetzt, aber es wurde kein Doppelklick ausgeführt.)

Hoffe, dass mir jemand helfen kann. Vielen Dank!

Greets

edit: die Klasse i verwendet:

using System; 
using System.Runtime.InteropServices; 

namespace AutoClicker 
{ 

    public class MouseSimulator 
    { 

     public void test_Click(System.Drawing.Point p) 
      { 
      //Move the mouse to the button position 

      //Perform button click. 
      INPUT structInput = new INPUT(); 
      structInput.type = SendInputEventType.InputMouse; 
      structInput.mkhi.mi.dwFlags = MouseEventFlags.ABSOLUTE | MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP; 
      structInput.mkhi.mi.dx = p.X; 
      structInput.mkhi.mi.dy = p.Y; 
      uint i = SendInput(1, ref structInput, Marshal.SizeOf(new INPUT())); 
     } 

     [DllImport("user32.dll")] 
     static extern IntPtr GetMessageExtraInfo(); 

     [DllImport("user32.dll", SetLastError = true)] 
     static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize); 

     [DllImport("user32.dll")] 
     static extern bool SetCursorPos(int X, int Y); 

     [Flags] 
     public enum MouseEventFlags 
     { 
      LEFTDOWN = 0x00000002, 
      LEFTUP = 0x00000004, 
      MIDDLEDOWN = 0x00000020, 
      MIDDLEUP = 0x00000040, 
      MOVE = 0x00000001, 
      ABSOLUTE = 0x00008000, 
      RIGHTDOWN = 0x00000008, 
      RIGHTUP = 0x00000010 
     } 

     /// <summary> 
     /// The event type contained in the union field 
     /// </summary> 
     enum SendInputEventType : int 
     { 
      /// <summary> 
      /// Contains Mouse event data 
      /// </summary> 
      InputMouse, 
      /// <summary> 
      /// Contains Keyboard event data 
      /// </summary> 
      InputKeyboard, 
      /// <summary> 
      /// Contains Hardware event data 
      /// </summary> 
      InputHardware 
     } 


     /// <summary> 
     /// The mouse data structure 
     /// </summary> 
     [StructLayout(LayoutKind.Sequential)] 
     struct MouseInputData 
     { 
      /// <summary> 
      /// The x value, if ABSOLUTE is passed in the flag then this is an actual X and Y value 
      /// otherwise it is a delta from the last position 
      /// </summary> 
      public int dx; 
      /// <summary> 
      /// The y value, if ABSOLUTE is passed in the flag then this is an actual X and Y value 
      /// otherwise it is a delta from the last position 
      /// </summary> 
      public int dy; 
      /// <summary> 
      /// Wheel event data, X buttons 
      /// </summary> 
      public uint mouseData; 
      /// <summary> 
      /// ORable field with the various flags about buttons and nature of event 
      /// </summary> 
      public MouseEventFlags dwFlags; 
      /// <summary> 
      /// The timestamp for the event, if zero then the system will provide 
      /// </summary> 
      public uint time; 
      /// <summary> 
      /// Additional data obtained by calling app via GetMessageExtraInfo 
      /// </summary> 
      public IntPtr dwExtraInfo; 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     struct KEYBDINPUT 
     { 
      public ushort wVk; 
      public ushort wScan; 
      public uint dwFlags; 
      public uint time; 
      public IntPtr dwExtraInfo; 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     struct HARDWAREINPUT 
     { 
      public int uMsg; 
      public short wParamL; 
      public short wParamH; 
     } 

     /// <summary> 
     /// Captures the union of the three three structures. 
     /// </summary> 
     [StructLayout(LayoutKind.Explicit)] 
     struct MouseKeybdhardwareInputUnion 
     { 
      /// <summary> 
      /// The Mouse Input Data 
      /// </summary> 
      [FieldOffset(0)] 
      public MouseInputData mi; 

      /// <summary> 
      /// The Keyboard input data 
      /// </summary> 
      [FieldOffset(0)] 
      public KEYBDINPUT ki; 

      /// <summary> 
      /// The hardware input data 
      /// </summary> 
      [FieldOffset(0)] 
      public HARDWAREINPUT hi; 
     } 

     /// <summary> 
     /// The Data passed to SendInput in an array. 
     /// </summary> 
     /// <remarks>Contains a union field type specifies what it contains </remarks> 
     [StructLayout(LayoutKind.Sequential)] 
     struct INPUT 
     { 
      /// <summary> 
      /// The actual data type contained in the union Field 
      /// </summary> 
      public SendInputEventType type; 
      public MouseKeybdhardwareInputUnion mkhi; 
     } 
    } 

} 

und ich benutzte es wie folgt aus:

System.Drawing.Point p = new System.Drawing.Point(2225, 154); 
     Cursor.Position = p; 
     MouseSimulator ms = new MouseSimulator(); 
     ms.test_Click(p); 
+0

Der Code, den Sie zeigte nur zeigt, dass Sie die Position sind zu ändern, wie werden Sie Ihre Doppelklick durchführen? Wie hast du es versucht? –

+1

Verwenden Sie SendInput(). Ein Doppelklick wird generiert, wenn Sie in kurzer Zeit zwei Mal auf und ab gehen und die App erkennt. –

+0

Ich habe die Klasse hinzugefügt, die ich verwende und wie ich sie benutzt habe. –

Antwort

0

Wenn Sie ti den Doppelklick zu simulieren, müssen Sie senden 4 INPUT mit SendInput():

Auch

definieren SendInput() wie folgt:

static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize); 
+0

@DavidHeffernan Überarbeitet. Ich habe einfach versucht, einen einfachen Hotfix zu erstellen: p –

Verwandte Themen