Send mouse and keyboard events

I am developing an application that should send some keys or mouse events to the active window.

I use this class: Mouse

using System.Runtime.InteropServices; using System.Windows.Forms; namespace Mouse { public static class VirtualMouse { // import the necessary API function so .NET can // marshall parameters appropriately [DllImport("user32.dll")] static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); // constants for the mouse_input() API function private const int MOUSEEVENTF_MOVE = 0x0001; private const int MOUSEEVENTF_LEFTDOWN = 0x0002; private const int MOUSEEVENTF_LEFTUP = 0x0004; private const int MOUSEEVENTF_RIGHTDOWN = 0x0008; private const int MOUSEEVENTF_RIGHTUP = 0x0010; private const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; private const int MOUSEEVENTF_MIDDLEUP = 0x0040; private const int MOUSEEVENTF_ABSOLUTE = 0x8000; // simulates movement of the mouse. parameters specify changes // in relative position. positive values indicate movement // right or down public static void Move(int xDelta, int yDelta) { mouse_event(MOUSEEVENTF_MOVE, xDelta, yDelta, 0, 0); } // simulates movement of the mouse. parameters specify an // absolute location, with the top left corner being the // origin public static void MoveTo(int x, int y) { mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, 0, 0); } // simulates a click-and-release action of the left mouse // button at its current position public static void LeftClick() { mouse_event(MOUSEEVENTF_LEFTDOWN, Control.MousePosition.X, Control.MousePosition.Y, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, Control.MousePosition.X, Control.MousePosition.Y, 0, 0); } public static void RightClick() { mouse_event(MOUSEEVENTF_RIGHTDOWN, Control.MousePosition.X, Control.MousePosition.Y, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, Control.MousePosition.X, Control.MousePosition.Y, 0, 0); } } } 

Keyboard

 using System.Runtime.InteropServices; using System.Windows.Forms; namespace Mouse { public static class VirtualKeyboard { [DllImport("user32.dll")] static extern uint keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); public static void KeyDown(System.Windows.Forms.Keys key) { keybd_event((byte)key, 0, 0, 0); } public static void KeyUp(System.Windows.Forms.Keys key) { keybd_event((byte)key, 0, 0x7F, 0); } } } 

this is my test code:

  private void button1_Click(object sender, EventArgs e) { Thread.Sleep(2000); VirtualMouse.Move(100, 100); VirtualMouse.RightClick(); VirtualKeyboard.KeyDown(System.Windows.Forms.Keys.A); VirtualKeyboard.KeyUp(System.Windows.Forms.Keys.A); } 

The mouse moves, but does not send a click. Any ideas? How can I press a key for a long time? I tried using thread.sleep between KeyDown and KeyUp and it does not work.

+7
source share
2 answers

There is an open source project on CodePlex (Microsoft's open source website)

Windows input simulator (C # SendInput Wrapper - simulates a keyboard and mouse)

http://inputsimulator.codeplex.com/

It has examples and is very easy to use.

+6
source

Your definitions should be Uint32 :

 private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x02; private const UInt32 MOUSEEVENTF_ABSOLUTE = 0x8000; private const UInt32 MOUSEEVENTF_LEFTUP = 0x04; private const UInt32 MOUSEEVENTF_RIGHTDOWN = 0x08; private const UInt32 MOUSEEVENTF_RIGHTUP = 0x10; 
0
source

All Articles