c#類比滑鼠鍵盤操作

來源:互聯網
上載者:User

一個簡單的類比鍵盤滑鼠操作的類,擴充 VirtualKeys 枚舉就可以了,或者直接寫!

using System;
using System.Runtime.InteropServices;
using System.Text;
class Keyboard
   {
      const uint KEYEVENTF_EXTENDEDKEY = 0x1;
      const uint KEYEVENTF_KEYUP = 0x2;
      [DllImport("user32.dll")]
      static extern short GetKeyState(int nVirtKey);
      [DllImport("user32.dll")]
     static extern void keybd_event(
                       byte bVk,
                       byte bScan,
                       uint dwFlags,
                       uint dwExtraInfo
                                               );

   public enum VirtualKeys: byte
   {
     VK_NUMLOCK = 0x90, //數字鎖定鍵
    VK_SCROLL = 0x91,  //滾動鎖定
    VK_CAPITAL = 0x14, //大小寫鎖定
    VK_A = 62
   }

    public static bool GetState(VirtualKeys Key)
    {
      return (GetKeyState((int)Key)==1);
    }
   public static void SetState(VirtualKeys Key, bool State)
    {
     if(State!=GetState(Key))
     {
      keybd_event(
                           (byte)Key,
                            0x45, 
                            KEYEVENTF_EXTENDEDKEY | 0,
                            0
                           );
     keybd_event(
                          (byte)Key,
                          0x45,
                          KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                          0
                         );
    }
  }
 }

樣本:
    類比操作
     Keyboard.SetState(
                                    VirtualKeys.VK_CAPITAL,
                                   !Keyboard.GetState(VirtualKeys.VK_CAPITAL)
                                    );
   得到鍵盤狀態
   Keyboard.GetState(VirtualKeys.VK_CAPITAL)

 * 十進位值 標識符 IBM相容鍵盤 

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

1    VK_LBUTTON   滑鼠左鍵
2    VK_RBUTTON   滑鼠右鍵
3    VK_CANCEL   Ctrl+Break(通常不需要處理)
4    VK_MBUTTON   滑鼠中鍵
8    VK_BACK    Backspace
9    VK_TAB     Tab
12   VK_CLEAR    Num Lock關閉時的數字鍵台5
13   VK_RETURN   Enter(或者另一個)
16   VK_SHIFT    Shift(或者另一個)
17   VK_CONTROL   Ctrl(或者另一個)
18   VK_MENU    Alt(或者另一個)
19   VK_PAUSE    Pause
20   VK_CAPITAL   Caps Lock
27   VK_ESCAPE   Esc
32   VK_SPACE    Spacebar
33   VK_PRIOR    Page Up
34   VK_NEXT    Page Down
35   VK_END     End
36   VK_HOME    Home
37    VK_LEFT    左箭頭
38   VK_UP     上箭頭
39   VK_RIGHT   右箭頭
40   VK_DOWN    下箭頭
41   VK_SELECT   可選
42   VK_PRINT   可選
43   VK_EXECUTE  可選
44   VK_SNAPSHOT  Print Screen
45   VK_INSERT   Insert
46   VK_DELETE  Delete
47   VK_HELP   可選
48~57  無      主鍵盤上的0~9
65~90  無      A~Z
96~105  VK_NUMPAD0~VK_NUMPAD9   Num Lock開啟時數字鍵台上的0~9
106   VK_NULTIPLY         數字鍵台上的*
107   VK_ADD           數字鍵台上的+
108   VK_SEPARATOR        可選
109   VK_SUBTRACT         數字鍵台上的-
110   VK_DECIMAL         數字鍵台上的.
111   VK_DIVIDE          數字鍵台上的/
112~135 VK_F1~VK_F24        功能鍵F1~F24
144   VK_NUMLOCK         Num Lock
145   VK_SCROLL          Scroll Lock

 */

 

 

突然發現在c#裡面原來還有一個  System.Windows.Forms.SendKeys

不過這個只能類比鍵盤

 

真正能類比滑鼠操作的代碼在這裡!找的我好辛苦啊!

函式宣告:
        private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
        private readonly int MOUSEEVENTF_LEFTUP = 0x4;
        [DllImport("user32")]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

調用方法:
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分別是你要點擊的點的橫座標和縱座標 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.