自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實現(xiàn)控制C#鼠標(biāo)坐標(biāo)的方法

開發(fā) 后端
本文將談?wù)剬崿F(xiàn)控制C#鼠標(biāo)坐標(biāo)的方法,包括指定水平方向的絕對位置或相對運動,希望本文能對大家了解控制C#鼠標(biāo)坐標(biāo)有所幫助。

C#鼠標(biāo)坐標(biāo)的控制,是鼠標(biāo)控制的關(guān)鍵。坐標(biāo)的提供,是精確定位的基礎(chǔ)。以下的代碼具備實用性,包括函數(shù),參數(shù)。這里還將介紹函數(shù)mouse_event需要用的應(yīng)用程序用來合成鼠標(biāo)事件。

  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_模擬鼠標(biāo)    
  85. {    
  86.            ///      
  87.            ///  Form1  的摘要說明。    
  88.            ///  
  89.   
     
  90.            public  class  Form1  :  System.Windows.Forms.Form    
  91.            {    
  92.                        ///      
  93.                        ///  必需的設(shè)計器變量。    
  94.                        ///  
  95.   
     
  96.                        private  System.ComponentModel.Container  components  =  null;    
  97.    
  98.                        public  Form1()    
  99.                        {    
  100.                                    //    
  101.                                    //  Windows  窗體設(shè)計器支持所必需的    
  102.                                    //    
  103.                                    InitializeComponent();    
  104.    
  105.                                    //    
  106.                                    //  TODO:  在  InitializeComponent  調(diào)用后添加任何構(gòu)造函數(shù)代碼    
  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.                        ///  設(shè)計器支持所需的方法  -  不要使用代碼編輯器修改    
  129.                        ///  此方法的內(nèi)容。    
  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.                        ///  應(yīng)用程序的主入口點。    
  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函數(shù)說明:      

dwFlags  --------    Long,下述標(biāo)志的一個組合  

MOUSEEVENTF_ABSOLUTE  
 

dx和dy指定鼠標(biāo)坐標(biāo)系統(tǒng)中的一個絕對位置。在鼠標(biāo)坐標(biāo)系統(tǒng)中,屏幕在水平和垂直方向上均勻分割成65535×65535個單元  -    MOUSEEVENTF_MOVE  

移動鼠標(biāo)  

MOUSEEVENTF_LEFTDOWN  

模擬鼠標(biāo)左鍵按下  

MOUSEEVENTF_LEFTUP  

模擬鼠標(biāo)左鍵抬起  

MOUSEEVENTF_RIGHTDOWN  

模擬鼠標(biāo)右鍵按下  

MOUSEEVENTF_RIGHTUP  

模擬鼠標(biāo)右鍵按下  

MOUSEEVENTF_MIDDLEDOWN  

模擬鼠標(biāo)中鍵按下  

MOUSEEVENTF_MIDDLEUP  

模擬鼠標(biāo)中鍵按下  

dx  

Long,根據(jù)是否指定了MOUSEEVENTF_ABSOLUTE標(biāo)志,指定水平方向的絕對位置或相對運動  

dy  -------------    Long,根據(jù)是否指定了MOUSEEVENTF_ABSOLUTE標(biāo)志,指定垂直方向的絕對位置或相對運動  

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

dwExtraInfo  ----    Long,通常未用的一個值。用GetMessageExtraInfo函數(shù)可取得這個值。可用的值取決于特定的驅(qū)動程序  

函數(shù)功能:該函數(shù)綜合鼠標(biāo)擊鍵和鼠標(biāo)動作。  

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

參數(shù):  

dwFlags:標(biāo)志位集,指定點擊按鈕和鼠標(biāo)動作的多種情況。此參數(shù)里的各位可以是下列值的任何合理組合:  

MOOSE_EVENTF_ABSOLOTE:表明參數(shù)dX,dy含有規(guī)范化的絕對坐標(biāo)。如果不設(shè)置此位,參數(shù)含有相對數(shù)據(jù):相對于上次位置的改動位置。此標(biāo)志可被設(shè)置,也可不設(shè)置,不管鼠標(biāo)的類型或與系統(tǒng)相連的類似于鼠標(biāo)的設(shè)備的類型如何。要得到關(guān)于相對鼠標(biāo)動作的信息,參見下面?zhèn)渥⒉糠帧?nbsp; 

MOOSEEVENTFMOVE:表明發(fā)生移動。  

M00SEEVENTF_LEFTDOWN:表明接按下鼠標(biāo)左鍵。  

M00SEEVENTF_LEFTUP:表明松開鼠標(biāo)左鍵。  

MOOSEEVENTF_RIGHTDOWN:表明按下鼠標(biāo)右鍵。  

MOOSEEVENTF_RIGHTUP:表明松開鼠標(biāo)右鍵。  

MOOSEEVENTF_MIDDLEDOWN:表明按下鼠標(biāo)中鍵。  

MOOSEEVENTF_MIDDLEUP:表明松開鼠標(biāo)中鍵。  

MOOSEEVENTF_WHEEL:在Windows  NT中如果鼠標(biāo)有一個輪,表明鼠標(biāo)輪被移動。移動的數(shù)量由dwData給出。  

dx:指定鼠標(biāo)沿x軸的絕對位置或者從上次鼠標(biāo)事件產(chǎn)生以來移動的數(shù)量,依賴于MOOSEEVENTF_ABSOLOTE的設(shè)置。給出的絕對數(shù)據(jù)作為鼠標(biāo)的實際X坐標(biāo);給出的相對數(shù)據(jù)作為移動的mickeys數(shù)。一個mickey表示鼠標(biāo)移動的數(shù)量,表明鼠標(biāo)已經(jīng)移動。  

dy:指定鼠標(biāo)沿y軸的絕對位置或者從上次鼠標(biāo)事件產(chǎn)生以來移動的數(shù)量,依賴于MOOSEEVENTF_ABSOLVTE的設(shè)置。給出的絕對數(shù)據(jù)作為鼠標(biāo)的實際y坐標(biāo),給出的相對數(shù)據(jù)作為移動的mickeys數(shù)。  

dwData:如果dwFlags為MOOSEEVENTF_WHEEL,則dwData指定鼠標(biāo)輪移動的數(shù)量。正值表明鼠標(biāo)輪向前轉(zhuǎn)動,即遠(yuǎn)離用戶的方向;負(fù)值表明鼠標(biāo)輪向后轉(zhuǎn)動,即朝向用戶。一個輪擊定義為WHEEL_DELTA,即120。  

如果dwFlagsS不是MOOSEEVENTF_WHEEL,則dWData應(yīng)為零。  

dwExtralnfo:指定與鼠標(biāo)事件相關(guān)的附加32位值。應(yīng)用程序調(diào)用函數(shù)GetMessgeExtrajnfo來獲得此附加信息。  

返回值:無。  

備注:如果鼠標(biāo)被移動,用設(shè)置MOUSEEVENTF_MOVE來表明,dX和dy保留移動的信息。給出的信息是絕對或相對整數(shù)值。  

如果指定了MOWSEEVENTF_ABSOLOTE值,則dX和dy含有標(biāo)準(zhǔn)化的絕對坐標(biāo),其值在0到65535之間。事件程序?qū)⒋俗鴺?biāo)映射到顯示表面。坐標(biāo)(0,0)映射到顯示表面的左上角,(6553,65535)映射到右下角。  

如果沒指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相對于上次鼠標(biāo)事件產(chǎn)生的位置(即上次報告的位置)的移動。正值表示鼠標(biāo)向右(或下)移動;負(fù)值表示鼠標(biāo)向左(或上)移動。  

鼠標(biāo)的相對移動服從鼠標(biāo)速度和加速度等級的設(shè)置,一個最終用戶用鼠標(biāo)控制面板應(yīng)用程序來設(shè)置這些值,應(yīng)用程序用函數(shù)SystemParameterslnfo來取得和設(shè)置這些值。  

在應(yīng)用加速時系統(tǒng)對指定相對鼠標(biāo)移動提供了兩個測試。如果指定的沿X軸y軸的距離比第一個鼠標(biāo)閾值大,并且鼠標(biāo)的加速等級非零,則操作系統(tǒng)將距離加倍。如果指定的沿X軸或y軸的距離比第二個鼠標(biāo)閾值大,并且鼠標(biāo)的加速等級為2,則操作系統(tǒng)將從第一個閾測試得來的距離加倍。這樣就允許操作系統(tǒng)將指定鼠標(biāo)沿 X軸或y軸的相對位移加到4倍。  

一旦應(yīng)用了加速,系統(tǒng)用期望的鼠標(biāo)速度換算合成的值。鼠標(biāo)速度的范圍是從1(最慢)到20(最快),并代表基于鼠標(biāo)移動的距離指示符移動的數(shù)量。缺省值是10,表示對鼠標(biāo)的移動設(shè)有附加的修改。  

函數(shù)mouse_event需要用的應(yīng)用程序用來合成鼠標(biāo)事件。也被應(yīng)用程序用來取得鼠標(biāo)位置和鼠標(biāo)按鍵狀態(tài)之外的鼠標(biāo)信息。例如,如果輸入板制造商想將基于畫筆的信息傳給自己的應(yīng)用程序,可以寫一個直接與輸入板硬件通信的動態(tài)鍵接庫(DLL),獲得附加的信息,并保存到一個隊列中。DLL然后調(diào)用 mouse_event,用標(biāo)準(zhǔn)按鍵和x/y位置數(shù)據(jù),并在參數(shù)dwExtralnfo設(shè)置排列的附加信息的指針或索引。當(dāng)應(yīng)用程序需要附加信息時,調(diào)用 DLL(連同存貯在dwEXtralnfo中的指針或索引),則DLL返回附加信息。  

Windows  CE:Windows  CE不支持參數(shù)  dwFlags取MOOSE  EVENTF  WHEEL常數(shù)。  

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

【編輯推薦】

  1. C#數(shù)組操作的體會淺談
  2. C#關(guān)機代碼實例詳解
  3. C#關(guān)機代碼的實現(xiàn)淺析
  4. C#程序設(shè)計關(guān)閉Windows窗體淺析
  5. C#程序設(shè)計獲取系統(tǒng)信息的Windows窗體淺析
責(zé)任編輯:彭凡 來源: sunnymoor.com
相關(guān)推薦

2009-09-02 18:11:24

C#鼠標(biāo)

2009-08-28 16:03:15

C#程序?qū)崿F(xiàn)鼠標(biāo)移動

2009-09-03 16:50:35

C#鼠標(biāo)形狀

2009-08-19 17:00:07

C#實現(xiàn)PrintPa

2009-08-20 14:22:17

C#實現(xiàn) Contro

2009-06-02 10:10:15

C#

2009-09-11 11:39:23

C# RadioBut

2009-09-07 09:36:29

C# DisposeDispose方法

2009-09-03 18:19:35

C#鼠標(biāo)右鍵

2009-09-08 16:51:50

C#鼠標(biāo)拖動

2009-08-26 13:15:38

C#選擇控制

2009-04-20 10:09:46

C#優(yōu)先隊列.NET Framew

2009-08-25 14:26:28

C#播放AVI文件

2009-09-10 17:37:01

C# get post

2009-09-10 18:06:25

C# button快捷

2024-05-16 12:33:37

C#編程指針

2009-08-26 18:11:52

前臺與后臺方法互調(diào)

2009-08-18 11:17:37

C#添加鼠標(biāo)右鍵

2009-08-17 17:48:00

C#自定義鼠標(biāo)樣式

2009-08-17 17:40:53

C# GetAllCu
點贊
收藏

51CTO技術(shù)棧公眾號