在研究如何模仿 搜狗输入法截图功能时的发现!可以用键盘或者编程的方式控制当前,鼠标光标的位置!废话不多说,主要要用到一个WinApi函数!

///  设置鼠标光标在整个屏幕的位置

SetCursorPos(

int X,   // 鼠标的X坐标

int Y    // 鼠标的Y坐标

)

注:X,Y坐标是指相对于 整个屏幕的坐标,而不是当前应用程序的坐标!

///获取当前鼠标光标的在整个屏幕上的位置

GetCursorPos(

out point p // 以一个结构体的方式,放回当前的鼠标光标的位置!

注:这个api函数,在.net类库中可以找到,相对应的托管代码!那就是Cursor这个类中的pos属性!有兴趣的朋友可以翻看MSDN关于这个类的相关信息!

下面是demo(支持非窗口焦点的情况下)

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

private enum MouseAction : int
        {
            MOUSEEVENTF_MOVE = 0x0001,     //移动鼠标
            MOUSEEVENTF_LEFTDOWN = 0x0002,// 模拟鼠标左键按下
            MOUSEEVENTF_LEFTUP = 0x0004, //模拟鼠标左键抬起
            MOUSEEVENTF_RIGHTDOWN = 0x0008,// 模拟鼠标右键按下
            MOUSEEVENTF_RIGHTUP = 0x0010, //模拟鼠标右键抬起
            MOUSEEVENTF_MIDDLEDOWN = 0x0020, //模拟鼠标中键按下
            MOUSEEVENTF_MIDDLEUP = 0x0040, //模拟鼠标中键抬起
            MOUSEEVENTF_ABSOLUTE = 0x8000 //标示是否采用绝对坐标
        }
        [DllImport("User32")]
        public extern static void SetCursorPos(int x, int y);

[DllImportAttribute("user32.dll", EntryPoint = "RegisterHotKey")]
        private static extern bool registerHotKey
            (
                IntPtr hWnd,       //接受热键的窗口句柄(句柄:窗体的系统代号)
                int id,             //热键编号    
                int fsModifiers,    //是否为组合键 例如ctrl shift 等等
                int vk              //一般按键 a,c 等等   
            );

[DllImportAttribute("user32.dll", EntryPoint = "UnregisterHotKey")]
        private static extern bool unregisterHotKey
            (
                IntPtr hWnd,        //接受热键的窗口句柄(句柄:窗体的系统代号)  
                int id              //热键编号上面注册热键的编号    
            );
        [System.Runtime.InteropServices.DllImport("user32")]
        private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

private void frmMain_Load(object sender, EventArgs e)
        {
            registerHotKey(this.Handle, 10001, 0, (int)Keys.Left);
            registerHotKey(this.Handle, 10002, 0, (int)Keys.Right);
            registerHotKey(this.Handle, 10003, 0, (int)Keys.Up);
            registerHotKey(this.Handle, 10004, 0, (int)Keys.Down);
            registerHotKey(this.Handle, 10005, 0, (int)Keys.Enter);

}
        private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            unregisterHotKey(this.Handle, 10001);
            unregisterHotKey(this.Handle, 10002);
            unregisterHotKey(this.Handle, 10003);
            unregisterHotKey(this.Handle, 10004);
            unregisterHotKey(this.Handle, 10005);
        }    private void addInfoToList(String s)
        {
            //this.listBox1.Items.Add(s);
        }
        protected override void WndProc(ref Message m)
        {
            const int WM_HOTKEY = 0x0312;
            switch (m.Msg)
            {
                case WM_HOTKEY:
                    Point nowPoint = Cursor.Position;
                    switch (m.WParam.ToInt32())
                    {
                        case 10001:
                          
                            SetCursorPos(nowPoint.X - 10, nowPoint.Y);
                            base.WndProc(ref m);
                            break;
                        case 10002:
                        
                            SetCursorPos(nowPoint.X + 10, nowPoint.Y);//设置当前鼠标的位置
                            base.WndProc(ref m);
                            break;
                        case 10003:
                         
                            SetCursorPos(nowPoint.X, nowPoint.Y - 10);
                            base.WndProc(ref m);
                            break;
                        case 10004:
                       
                            SetCursorPos(nowPoint.X, nowPoint.Y + 10);
                            base.WndProc(ref m);
                            break;
                        case 10005:
                         
                            mouse_event((int)(MouseAction.MOUSEEVENTF_LEFTDOWN | MouseAction.MOUSEEVENTF_LEFTUP),
                                0,
                                0,
                                0,
                                0);
                            //mouse_event((int)(MouseAction.MOUSEEVENTF_LEFTDOWN | MouseAction.MOUSEEVENTF_LEFTUP),
                            // 0,
                            // 0,
                            // 0,
                            // 0);
                            //base.WndProc(ref m);
                            break;
                    }
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }

}

用键盘控制鼠标移动!!相关推荐

  1. mfc键盘控制移动鼠标光标_如何在Windows中使用键盘控制鼠标光标

    mfc键盘控制移动鼠标光标 If you're stuck without a mouse temporarily, don't worry-you can still use your PC. Yo ...

  2. Python自动化 | 通过键盘控制鼠标来玩赛尔号

    最近心血来潮回归赛尔号(十年铁皮常不请自来) 做剧情任务的时候有个小游戏,拖动黄色的按钮到达终点,白色的是存档点,途中如果碰到墙壁需要对战野怪,打赢了可以从存档点出发,但是由于刚回归,精灵跟不上时代, ...

  3. python键盘控制_python实现键盘控制鼠标移动

    玩QQ桌球游戏时,有时候用鼠标控制鼠标指针的微小移动比较费劲儿,所以想写个程序,可以用键盘的上下左右键来控制鼠标的移动,每次只移动一个像素. 本脚本依赖pywin32.pyHook和pymouse这两 ...

  4. c++用键盘按键控制光标移动_如何在Windows10中用键盘控制鼠标光标

    如果你的鼠标突然坏掉了,此时找不到替代鼠标,或者你使用的鼠标是电池供电的,此时电量耗尽,那么你可以将键盘配置为鼠标暂时缓解燃眉之急. 设置步骤 键盘鼠标控制功能内置于Windows10中.首先进入设置 ...

  5. win10 java模拟鼠标_[pc玩家]如何在Windows10中用键盘控制鼠标光标

    如果你的鼠标突然坏掉了,此时找不到替代鼠标,或者你使用的鼠标是电池供电的,此时电量耗尽,那么你可以将键盘配置为鼠标暂时缓解燃眉之急. 设置步骤 键盘鼠标控制功能内置于Windows10中.首先进入设置 ...

  6. AHK 键盘控制鼠标点击屏幕不同位置

    按键控制鼠标点击屏幕特定位置 按键控制重设屏幕点击位置 按键显示当前鼠标在屏幕上的位置 V1.0代码功能: 按 A 和 D 分别对应点击两个单独的屏幕坐标 按 Q 和 E分别对应重新设置两个单独的屏幕 ...

  7. linux keynav 鼠标可以扔掉了键盘控制鼠标

    我是一个vim用户,喜欢使用键盘操作大部分的事情.无奈现在很多软件从设计之初就是为了鼠标设计的.就导致有些时候不得不使用鼠标.那么退一步讲,能否使用键盘临时控制一下鼠标呢?这样就可以进一步减少鼠标的使 ...

  8. linux键盘控制鼠标软件下载,手机控制电脑软件(Mouse Server)

    Mouse Server(手机控制电脑软件)是WiFi Mouse的配套软件,快速把你手机变成无线鼠标.键盘.触摸板的应用,它还支持语音识别直接输出文本到电脑端,安装软件后连接手机可以让手机控制电脑! ...

  9. 鼠标右边的数字按键无效(不是LOCK),原因是由于勾上使用键盘控制鼠标

    解决方法:打开:控制面板\轻松使用\轻松使用设置中心\使鼠标更易于使用

最新文章

  1. “趣冷淡”怎么看?网络电话寻求共同语言
  2. jspservlet初体验——用户登录功能实现
  3. 读书笔记之《The Art of Readable Code》Part 2
  4. java web汽车商城_基于jsp的汽车销售商城系统
  5. 2x麦克劳林公式_极限求解-泰勒公式理解
  6. bzoj 3517: 翻硬币
  7. python 初级笔记
  8. macOS上简便好用的看图软件分享
  9. 成为0.01%!利用TensorFlow.js和深度学习,轻松阅读古草体文字
  10. 什么是串行接口和并行接口
  11. 小学校计算机教室年度工作总结,小学计算机教师年度工作总结
  12. 《炬丰科技-半导体工艺》石英深反应离子刻蚀特性研究
  13. A performance evaluation of local descriptors——局部描述子评估译文(1,2,...)
  14. Aria2一键安装及管理脚本,搭建AriaNg前端
  15. 基于ARM架构openEuler系统通过qemu模拟器自动安装启动ARM架构的openEuler虚拟机
  16. Python批量word2pdf、ppt2pdf
  17. 时间戳90K是什么意思?
  18. Java解析魔兽争霸3录像W3G文件(三):解析游戏开始前的信息
  19. c#编写activeX控件详细教程,底部附有下载地址
  20. win10关闭系统更新的设置

热门文章

  1. 『曹大带我学 Go 』系列文章汇总
  2. 使用 dlopen 和 dlsym 来使用 C++ 中的函数、类
  3. 基于opencv的 SNR,GAMMA,色差,饱和度,曝光误差,白平衡误差的自动化算法开发
  4. cookie的domain属性
  5. 快捷键使电脑屏幕翻转
  6. Spring Boot 整合 阿里云短信(模板模式)
  7. 我的Url重写,我的UrlRewriting
  8. 网络基础——牛客网刷题第四波
  9. Jmeter察看结果树之RegExp Tester (正则表达式测试)
  10. Android | HEIF图片格式显示问题