实现控制C#鼠标坐标的方法

C#鼠标坐标的控制,是鼠标控制的关键。坐标的提供,是精确定位的基础。以下的代码具备实用性,包括函数,参数。这里还将介绍函数mouse_event需要用的应用程序用来合成鼠标事件。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、做网站、成都外贸网站建设公司、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的江西网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

 
 
 
  1. using  System;    
  2. using  System.Runtime.InteropServices;    
  3. using  System.Text;    
  4. namespace  ConsoleApplication8{    
  5. class  Class1{    
  6. [STAThread]    
  7. static  void  Main(string[]  args){    
  8. //  Display  current  status  of  keys.    
  9. Console.WriteLine(    
  10. "**BEFORE**/r/nCAP:  {0}/r/nSCR:  {1}/r/nNUM:  {2}",      
  11. Keyboard.GetState(VirtualKeys.VK_CAPITAL)?"ON":"OFF",    
  12. Keyboard.GetState(VirtualKeys.VK_SCROLL)?"ON":"OFF",    
  13. Keyboard.GetState(VirtualKeys.VK_NUMLOCK)?"ON":"OFF"    
  14. );    
  15. //  Toggle  all  the  keys:    
  16. Keyboard.SetState(    
  17. VirtualKeys.VK_CAPITAL,      
  18. !Keyboard.GetState(VirtualKeys.VK_CAPITAL)    
  19. );    
  20. Keyboard.SetState(    
  21. VirtualKeys.VK_SCROLL,      
  22. !Keyboard.GetState(VirtualKeys.VK_SCROLL)    
  23. );    
  24. Keyboard.SetState(    
  25. VirtualKeys.VK_NUMLOCK,      
  26. !Keyboard.GetState(VirtualKeys.VK_NUMLOCK)    
  27. );    
  28. //  Display  new  status  of  keys.    
  29. Console.WriteLine(    
  30. "/r/n**AFTER**/r/nCAP:  {0}/r/nSCR:  {1}/r/nNUM:  {2}",      
  31. Keyboard.GetState(VirtualKeys.VK_CAPITAL)?"ON":"OFF",    
  32. Keyboard.GetState(VirtualKeys.VK_SCROLL)?"ON":"OFF",    
  33. Keyboard.GetState(VirtualKeys.VK_NUMLOCK)?"ON":"OFF"    
  34. );    
  35. Console.ReadLine();    
  36. }    
  37. }    
  38. public  enum  VirtualKeys:  byte{    
  39. VK_NUMLOCK  =  0x90,    
  40. VK_SCROLL  =  0x91,    
  41. VK_CAPITAL  =  0x14    
  42. }    
  43. class  Keyboard{    
  44. const  uint  KEYEVENTF_EXTENDEDKEY  =  0x1;    
  45. const  uint  KEYEVENTF_KEYUP  =  0x2;    
  46. [DllImport("user32.dll")]    
  47. static  extern  short  GetKeyState(int  nVirtKey);    
  48. [DllImport("user32.dll")]    
  49. static  extern  void  keybd_event(    
  50. byte  bVk,      
  51. byte  bScan,      
  52. uint  dwFlags,      
  53. uint  dwExtraInfo    
  54. );    
  55. public  static  bool  GetState(VirtualKeys  Key){    
  56. return  (GetKeyState((int)Key)==1);    
  57. }    
  58. public  static  void  SetState(VirtualKeys  Key,  bool  State){    
  59. if(State!=GetState(Key)){    
  60. keybd_event(    
  61. (byte)Key,      
  62. 0x45,      
  63. KEYEVENTF_EXTENDEDKEY    ¦  0,      
  64. 0    
  65. );    
  66. keybd_event(    
  67. (byte)Key,      
  68. 0x45,      
  69. KEYEVENTF_EXTENDEDKEY    ¦  KEYEVENTF_KEYUP,      
  70. 0    
  71. );    
  72. }    
  73. }    
  74. }    
  75. }    
  76. ----------------------------------------------------------    
  77. using  System;    
  78. using  System.Drawing;    
  79. using  System.Collections;    
  80. using  System.ComponentModel;    
  81. using  System.Windows.Forms;    
  82. using  System.Data;    
  83.    
  84. namespace  Example107_模拟鼠标    
  85. {    
  86.            ///      
  87.            ///  Form1  的摘要说明。    
  88.            ///  
  89.     
  90.            public  class  Form1  :  System.Windows.Forms.Form    
  91.            {    
  92.                        ///      
  93.                        ///  必需的设计器变量。    
  94.                        ///  
  95.     
  96.                        private  System.ComponentModel.Container  components  =  null;    
  97.    
  98.                        public  Form1()    
  99.                        {    
  100.                                    //    
  101.                                    //  Windows  窗体设计器支持所必需的    
  102.                                    //    
  103.                                    InitializeComponent();    
  104.    
  105.                                    //    
  106.                                    //  TODO:  在  InitializeComponent  调用后添加任何构造函数代码    
  107.                                    //    
  108.                        }    
  109.    
  110.                        ///      
  111.                        ///  清理所有正在使用的资源。    
  112.                        ///  
  113.     
  114.                        protected  override  void  Dispose(  bool  disposing  )    
  115.                        {    
  116.                                    if(  disposing  )    
  117.                                    {    
  118.                                                if  (components  !=  null)      
  119.                                                {    
  120.                                                            components.Dispose();    
  121.                                                }    
  122.                                    }    
  123.                                    base.Dispose(  disposing  );    
  124.                        }    
  125.    
  126.                        #region  Windows  Form  Designer  generated  code    
  127.                        ///      
  128.                        ///  设计器支持所需的方法  -  不要使用代码编辑器修改    
  129.                        ///  此方法的内容。    
  130.                        ///  
  131.     
  132.                        private  void  InitializeComponent()    
  133.                        {    
  134.                                    this.button1  =  new  System.Windows.Forms.Button();    
  135.                                    this.SuspendLayout();    
  136.                                    //      
  137.                                    //  button1    
  138.                                    //      
  139.                                    this.button1.Location  =  new  System.Drawing.Point(144,  176);    
  140.                                    this.button1.Name  =  "button1";    
  141.                                    this.button1.TabIndex  =  0;    
  142.                                    this.button1.Text  =  "Mouse";    
  143.                                    this.button1.Click  +=  new  System.EventHandler(this.button1_Click);    
  144.                                    //      
  145.                                    //  Form1    
  146.                                    //      
  147.                                    this.AutoScaleBaseSize  =  new  System.Drawing.Size(6,  14);    
  148.                                    this.ClientSize  =  new  System.Drawing.Size(280,  237);    
  149.                                    this.Controls.AddRange(new  System.Windows.Forms.Control[]  {    
  150.                                                                                                                                                                                                                            this.button1});    
  151.                                    this.Name  =  "Form1";    
  152.                                    this.Text  =  "Form1";    
  153.                                    this.DoubleClick  +=  new  System.EventHandler(this.Form1_DoubleClick);    
  154.                                    this.ResumeLayout(false);    
  155.    
  156.                        }    
  157.                        #endregion    
  158.    
  159.                        ///      
  160.                        ///  应用程序的主入口点。    
  161.                        ///  
  162.     
  163.                        [STAThread]    
  164.                        static  void  Main()      
  165.                        {    
  166.                                    Application.Run(new  Form1());    
  167.                        }    
  168.    
  169.                        private  System.Windows.Forms.Button  button1;    
  170.    
  171.                        [System.Runtime.InteropServices.DllImport("user32")]    
  172.                        private  static  extern  int  mouse_event(int  dwFlags,int  dx,int  dy,  int  cButtons,  int  dwExtraInfo);    
  173.                        const  int  MOUSEEVENTF_MOVE  =  0x0001;    
  174.                        const  int  MOUSEEVENTF_LEFTDOWN  =  0x0002;    
  175.                        const  int  MOUSEEVENTF_LEFTUP  =  0x0004;    
  176.                        const  int  MOUSEEVENTF_RIGHTDOWN  =  0x0008;    
  177.                        const  int  MOUSEEVENTF_RIGHTUP  =  0x0010;    
  178.                        const  int  MOUSEEVENTF_MIDDLEDOWN  =  0x0020;    
  179.                        const  int  MOUSEEVENTF_MIDDLEUP  =  0x0040;    
  180.                        const  int  MOUSEEVENTF_ABSOLUTE  =  0x8000;    
  181.    
  182.                        private  void  Form1_DoubleClick(object  sender,  System.EventArgs  e)    
  183.                        {    
  184.                                    MessageBox.Show("Double  Click");    
  185.                        }    
  186.    
  187.                        private  void  button1_Click(object  sender,  System.EventArgs  e)    
  188.                        {    
  189.                                    mouse_event(MOUSEEVENTF_MOVE,100,100,0,0);                
  190.                                        
  191.                                    //下面是模拟双击的    
  192.                                    //mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);    
  193.                                    //mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);                
  194.    
  195.                                //mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);    
  196.                                //mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);                
  197.                        }    
  198.            }    
  199. }   

----------------------------------------------------------

mouse_event函数说明:   

dwFlags  --------    Long,下述标志的一个组合

MOUSEEVENTF_ABSOLUTE  

dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元  -    MOUSEEVENTF_MOVE

移动鼠标

MOUSEEVENTF_LEFTDOWN

模拟鼠标左键按下

MOUSEEVENTF_LEFTUP

模拟鼠标左键抬起

MOUSEEVENTF_RIGHTDOWN

模拟鼠标右键按下

MOUSEEVENTF_RIGHTUP

模拟鼠标右键按下

MOUSEEVENTF_MIDDLEDOWN

模拟鼠标中键按下

MOUSEEVENTF_MIDDLEUP

模拟鼠标中键按下

dx

Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动

dy  -------------    Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动

cButtons  -------    Long,未使用

dwExtraInfo  ----    Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序

函数功能:该函数综合鼠标击键和鼠标动作。

函数原型:VOID  mouse_event(DWORD  dwFlags,DWORD  dx,DWORD  dwFlags,OWORD  dx,DWORD  dy,  DWORD  dwData,  DWORD  dwExtralnfo);

参数:

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

MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。

MOOSEEVENTFMOVE:表明发生移动。

M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。

M00SEEVENTF_LEFTUP:表明松开鼠标左键。

MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。

MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。

MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。

MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。

MOOSEEVENTF_WHEEL:在Windows  NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

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

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

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

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

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

返回值:无。

备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。

如果指定了MOWSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(6553,65535)映射到右下角。

如果没指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相对于上次鼠标事件产生的位置(即上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移动。

鼠标的相对移动服从鼠标速度和加速度等级的设置,一个最终用户用鼠标控制面板应用程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。

在应用加速时系统对指定相对鼠标移动提供了两个测试。如果指定的沿X轴y轴的距离比第一个鼠标阈值大,并且鼠标的加速等级非零,则操作系统将距离加倍。如果指定的沿X轴或y轴的距离比第二个鼠标阈值大,并且鼠标的加速等级为2,则操作系统将从第一个阈测试得来的距离加倍。这样就允许操作系统将指定鼠标沿 X轴或y轴的相对位移加到4倍。

一旦应用了加速,系统用期望的鼠标速度换算合成的值。鼠标速度的范围是从1(最慢)到20(最快),并代表基于鼠标移动的距离指示符移动的数量。缺省值是10,表示对鼠标的移动设有附加的修改。

函数mouse_event需要用的应用程序用来合成鼠标事件。也被应用程序用来取得鼠标位置和鼠标按键状态之外的鼠标信息。例如,如果输入板制造商想将基于画笔的信息传给自己的应用程序,可以写一个直接与输入板硬件通信的动态键接库(DLL),获得附加的信息,并保存到一个队列中。DLL然后调用 mouse_event,用标准按键和x/y位置数据,并在参数dwExtralnfo设置排列的附加信息的指针或索引。当应用程序需要附加信息时,调用 DLL(连同存贮在dwEXtralnfo中的指针或索引),则DLL返回附加信息。

Windows  CE:Windows  CE不支持参数  dwFlags取MOOSE  EVENTF  WHEEL常数。

速查:  Windows  NT:  3.1及以上版本;  Windows:95及以上版本;Windows  CE:不支持;头文件:winuser.h;输入库:user32.lib。

【编辑推荐】

  1. C#数组操作的体会浅谈
  2. C#关机代码实例详解
  3. C#关机代码的实现浅析
  4. C#程序设计关闭Windows窗体浅析
  5. C#程序设计获取系统信息的Windows窗体浅析

文章名称:实现控制C#鼠标坐标的方法
文章来源:http://www.shufengxianlan.com/qtweb/news38/91638.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联