c#获取鼠标坐标

    很多时候我们需要用到鼠标在相对于窗体上的坐标,或者相对于屏幕的坐标,这里就把我的经验记录下。

    用Control.MousePosition获得当前鼠标的坐标CurrentPoint,使用Control.PointToClient方法,前面获得的CurrentPoint作为其参数,返回的Point类型的对象即为鼠标相对于某个控件的坐标。

现在以鼠标相对于窗体的坐标做为例子,如下:
            Point screenPoint = Control.MousePosition;//鼠标相对于屏幕左上角的坐标

Point formPoint = this.PointToClient(Control.MousePosition);//鼠标相对于窗体左上角的坐标

同理:

Point button1Point= button1Point.PointToClient(Control.MousePosition); //鼠标相对于button1左上角的坐标

还有Control.PointToScreen方法,返回的是相对于屏幕的坐标。

(转摘自瑞恩多芬)

C# 模拟鼠标移动与点击

我们需要用到的mouse_event函数,位于user32.dll这个库文件里面,所以我们要先声明引用。

[System.Runtime.InteropServices.DllImport("user32")]
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
//移动鼠标
const int MOUSEEVENTF_MOVE = 0x0001;
//模拟鼠标左键按下
const int MOUSEEVENTF_LEFTDOWN = 0x0002;
//模拟鼠标左键抬起
const int MOUSEEVENTF_LEFTUP = 0x0004;
//模拟鼠标右键按下
const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
//模拟鼠标右键抬起
const int MOUSEEVENTF_RIGHTUP = 0x0010;
//模拟鼠标中键按下
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
//模拟鼠标中键抬起
const int MOUSEEVENTF_MIDDLEUP = 0x0040;
//标示是否采用绝对坐标
const int MOUSEEVENTF_ABSOLUTE = 0x8000; 

dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:

  • MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。
  • MOUSEEVENTF_MOVE:表明发生移动。
  • MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
  • MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
  • MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
  • MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
  • MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
  • MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
  • MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。

dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。

dwData:如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。

如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。

dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessageExtraInfo来获得此附加信息。

返回值:无。

程序中我们直接调用mouse_event函数就可以了 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);

1、这里是鼠标左键按下和松开两个事件的组合即一次单击: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

2、模拟鼠标右键单击事件: mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )

3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

4、使用绝对坐标 MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0

需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。5、直接设定绝对坐标并单击 mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 其中X,Y分别是你要点击的点的横坐标和纵坐标

(转载自黑冰)

keybd_event使用方法

标签: byteinsertdeletefunctionwindowsup
2011-02-11 09:32 52841人阅读 评论(3) 收藏 举报

 分类:
MFC(16) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。

该函数原型如下:

  VOID keybd_event(

  BYTE bVk, // virtual-key code

  BYTE bScan, // hardware scan code

  DWORD dwFlags, // flags specifying various function options

  DWORD dwExtraInfo // additional data associated with keystroke

  );

  从原型可以看出,Keybd_event()共有四个参数:

第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);

第二个参数为扫描码,一般不用设置,用0代替就行;

第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";

第四个参数一般也是置0即可。

例子1:模拟按下'A'键
   keybd_event(65,0,0,0);
   keybd_event(65,0,KEYEVENTF_KEYUP,0);

例子2:模拟按下'ALT+F4'键
   keybd_event(18,0,0,0);
   keybd_event(115,0,0,0);
   keybd_event(115,0,KEYEVENTF_KEYUP,0);
   keybd_event(18,0,KEYEVENTF_KEYUP,0);

附:常用模拟键的键值对照表(也可参考http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)

键盘键与虚拟键码对照表

      字母和数字键 数字小键盘的键 功能键 其它键 
      键   键码    键   键码    键   键码     键    键码 
      A   65     0   96     F1   112   Backspace    8 
      B   66     1   97     F2   113   Tab       9 
      C   67     2   98      F3   114    Clear      12 
      D   68   3   99     F4   115  Enter      13 
      E   69     4   100    F5   116  Shift      16 
      F   70     5   101    F6   117  Control     17 
      G   71     6   102    F7   118   Alt       18 
      H   72    7   103    F8   119  Caps Lock    20 
      I   73    8   104    F9   120  Esc       27 
      J   74    9   105    F10  121  Spacebar    32 
      K   75    *   106     F11  122  Page Up     33 
      L   76    +   107     F12  123  Page Down    34 
      M   77    Enter 108    --   --   End       35 
      N   78    -   109    --   --    Home      36 
      O   79    .   110    --   --     Left Arrow   37 
      P   80    /   111    --   --     Up Arrow    38 
      Q   81    --   --     --   --     Right Arrow   39 
      R   82    --   --    --   --      Down Arrow    40 
      S   83    --   --     --   --     Insert      45 
      T   84    --   --     --   --     Delete      46 
      U   85    --   --     --   --     Help       47 
      V   86    --   --    --   --     Num Lock     144 
      W   87          
      X   88      
      Y   89      
      Z   90      
      0   48      
      1   49      
      2   50       
      3   51       
      4   52       
      5   53       
      6   54       
      7   55       
      8   56       
      9   57  

(转载自yizhou2010)

C#获取鼠标位置,模拟鼠标,模拟键盘(多方转载)相关推荐

  1. QGraphicsView放大和缩小下鼠标位置使用鼠标滚轮

    c++ qt qgraphicsview 我有一个在屏幕中间的QGraphicsView窗口的应用程序.我想能够放大和车轮滚动. 目前,我有重新的QGraphicsView和重写的滚动函数,让是doe ...

  2. js 获取鼠标在画布的位置_JS获取鼠标位置(鼠标坐标)

    在 JavaScript 中,当事件发生时,获取鼠标的位置是件很重要的事件.由于浏览器的不兼容性,不同浏览器分别在各自事件对象中定义了不同的属性,说明如下表所示.这些属性都是以像素值定义了鼠标指针的坐 ...

  3. C++获取鼠标位置,移动鼠标

    获取鼠标位置: 函数原型: WINUSERAPI BOOL WINAPI GetCursorPos(__out LPPOINT lpPoint);WINUSERAPI BOOL WINAPI GetP ...

  4. python坐标定位_python实现获取屏幕坐标位置值+VBS模拟鼠标操作

    [Shell] 纯文本查看 复制代码Set ws = CreateObject("WScript.Shell") '创建一个shell对象(ws.SendKeys "{E ...

  5. vc++6.0 模拟鼠标点击代码 木马程序的编写 VC 模拟键盘输入

    From: http://fengqing888.blog.163.com/blog/static/33011416201112124481/ MFC 工程 把以下代码放到你想要响应的函数里面就行 C ...

  6. C++实现鼠标控制 封装常见的模拟鼠标、键盘的操作函数

    API 或 MFC 视窗程序 里 有 函数, 例如 API 函数 设位置: BOOL SetCursorPos( int x, int y); 参数是屏幕坐标x,y 头文件 Winuser.h 链接库 ...

  7. 【向重复工作说不】c#之模拟鼠标操作

    一.写在前面 作为一个人力资源工作者,会经常遇到填表.报表的事务,其实有时候就是重复再重复的点击鼠标工作,特别是遇到一些复杂的客户端程序.网页程序,诸如用友客户端.社保管理系统等等,就尤其让人头疼.正 ...

  8. android模拟鼠标点击事件给控件,Android使用模拟鼠标拖动操作

    将远程控制支持添加到android2.2版本. 此处的看起来与电视所使用的相似,不同之处在于它具有比电视更多的自定义功能按钮. 单击上的切换按钮,当切换到鼠标模式时,在android视图上绘制类似鼠标 ...

  9. QT中鼠标位置获取问题之event-globalPos()与pos()函数

    QT中鼠标位置获取问题之event->globalPos()与pos()函数 标签: Qt 2015-01-03 19:41 820人阅读 评论(0) 收藏 举报 分类: Qt 版权声明:本文为 ...

  10. 鼠标位置精确定位总结

    鼠标位置 序号 鼠标位置属性 属性描述 浏览器支持情况 备注 IE Chrome Safari  Firefox Opera 1 event.x 以浏览器窗口可见部分的左上角为坐标原点(不含滚动条) ...

最新文章

  1. Hibernate关联映射(一对多/多对多)
  2. 小程序组件的使用(二) packer多选组件
  3. 软件测试——测试分类
  4. php 调用图,php 缩略图类(附调用示例)
  5. 交换机的RTU License 华为S5700交换机
  6. qq红包领取支付宝红包功能,qqxml跳转技术
  7. dota2 自定义官方服务器,起源2引擎DOTA2重生设置 自定义房间创建
  8. linux根目录解释
  9. Eclipse中查看源代码
  10. java大数据开发做什么你知道吗?大数据的职业发展规划
  11. 没有大数据就没有智慧城市
  12. AT命令拨电话,如何判断手机的状态?
  13. 8个输入法高效使用技巧,大幅提升你的打字效率
  14. 关于BIOS升级的方法
  15. VLAN内端口隔离技术
  16. 【Kotlin】Android-使用WebDAV协议云存储文件(详细)—附demo源码
  17. NAS 网络错误0x8007003B的解决方案
  18. ArcGIS+python 绘制人口流动OD图
  19. 2018普通本科专业目录计算机类,普通高等学校本科专业目录
  20. 在excel中绘制甘特图

热门文章

  1. 驱动安装成功 adb devices无法找到设备 解决方法
  2. vivo IQOO手机运行uniapp检测不到(uniapp搜不到vivo)
  3. css 样式 使用变量
  4. 三用表校验仪TD1855多用表校准装置
  5. Win10系统怎么在右键菜单中添加命令提示符
  6. 七剑下黄山--2006年春节黄山游
  7. matlab 高斯信道,基于MATLAB高斯信道下的16QAM误码率分析的设计 通信系统课程设计报告.doc...
  8. Visual Studio Code (VS Code) - 自定义大写和小写转换快捷键
  9. java显示html乱码怎么解决方法_Java web解决各种乱码问题
  10. 什么是低温等离子体?