Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send mouse & keyboard events

I'm developing an app that have to send some keys or mouse events to the active window.

I'm using 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 testing 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);
 }

Mouse moves, but doesn't send click. Any idea? How can I make a key continue pressed for some time? I tried using thread.sleep between KeyDown and KeyUp and it's not working.

like image 544
Manu Avatar asked Dec 01 '11 10:12

Manu


People also ask

How do you automate mouse movement?

GS Auto Clicker is a popular tool for automating mouse clicks. It is simple to use and have a simply UI to match. When recording a sequence of clicks, you can select which mouse button (right or left) should be clicked with, and you can program intervals i.e., time that must pass between clicks.

How to Send keys Power Automate?

Simulate using the keyboard to enter text or other key commands with the Send Keys action. Use the Insert special key button to insert keys such as the arrow keys, Caps Lock or keys from the numeric keypad, and Insert modifier to send keys such as Shift and Control.


1 Answers

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

Windows Input Simulator (C# SendInput Wrapper - Simulate Keyboard and Mouse)

http://inputsimulator.codeplex.com/

It has examples and real simple to use.

like image 108
user1054326 Avatar answered Oct 08 '22 04:10

user1054326