C# mouse keyboard monitor

简介: /*********************************************************************************** * C# mouse keyboard monitor * 说明: * 最近想用C#做一个鼠标、键盘模拟器,所以找了点资料模拟一下。
/***********************************************************************************
 *                          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);
            }
        }
    }

 

目录
相关文章
C#多线程系列(2):多 线程锁lock和Monitor
C#多线程系列(2):多 线程锁lock和Monitor
357 0
锁、C#中Monitor和Lock以及区别
1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁无法释放,所以需要在try{} catch(){}之后的finally{}结构体中释放锁(Monitor.Exit())。
2504 0
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行 2009-09-22 15:17 C#中使用Monitor类、Lock和Mutex类来同步多线程的执行         在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、Lock关键字和Mutex类。
866 0