且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C# mouse keyboard monitor

更新时间:2022-08-12 19:58:19

/***********************************************************************************
 *                          C# mouse keyboard monitor
 * 说明:
 *     最近想用C#做一个鼠标、键盘模拟器,所以找了点资料模拟一下。
 *
 *                                                 2016-7-10 深圳 南山平山村 曾剑锋
 **********************************************************************************/


一、参考文档:
    1. C# 如何用按钮实现鼠标滚轮操作
        http://blog.csdn.net/jglie/article/details/6872333
    2. c#  mouse_event 模拟鼠标点击事件 绝对位置
        http://blog.sina.com.cn/s/blog_71d894bd01013goa.html
    3. C# Win32API 模拟鼠标移动及点击事件
        http://www.cnblogs.com/08shiyan/archive/2011/07/18/2109086.html
    4. How to: Simulate Mouse and Keyboard Events in Code
        https://msdn.microsoft.com/en-us/library/ms171548.aspx
    5. SendKeys Class
        https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
    6. Virtual-Key Codes
        https://msdn.microsoft.com/zh-cn/library/dd375731(v=vs.85).aspx
    7. C#中将字母/字符转换为键盘的key/键值/keycode
        http://www.crifan.com/convert_char_letter_to_key_keycode_in_csharp/
    8. VkKeyScan function
        https://msdn.microsoft.com/en-us/library/ms646329(VS.85).aspx

二、KeyBoard
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;

    namespace MouseMonitorW
    {
        class KeyBoard
        {
            [DllImport("user32.dll")]
            static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
            [DllImport("user32.dll")]
            public static extern Keys VkKeyScan(char ch); 

            public static void sendKey(char key)
            {
                keybd_event((byte)VkKeyScan(key), 0, 0, 0);
                keybd_event((byte)VkKeyScan(key), 0, 2, 0);
            }
        }
    }


三、Mouse:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.InteropServices;

    namespace MouseMonitorW
    {
        class Mouse
        {
            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_WHEEL         = 0x0800;   // 模拟鼠标滚轮
            private const int MOUSEEVENTF_MIDDLEDOWN    = 0x0020;   // 模拟鼠标中键按下 
            private const int MOUSEEVENTF_MIDDLEUP      = 0x0040;   // 模拟鼠标中键抬起 
            private const int MOUSEEVENTF_ABSOLUTE      = 0x8000;   // 标示是否采用绝对坐标 

            [DllImport("user32")]
            private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

            public static void move(int dx, int dy)
            {
                mouse_event(MOUSEEVENTF_MOVE, dx, dy, 0, 0); 
            }

            public static void absMove(int x, int y)
            {
                mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);
            }

            public static void wheel(int roll) 
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, roll, 0);
            }

            public static void leftSingle()
            {
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            }

            public static void leftDouble()
            {
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            }

            public static void right()
            {
                mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
            }

            public static void middle()
            {
                mouse_event(MOUSEEVENTF_MIDDLEUP | MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
            }
        }
    }