keybd_event和mouse_event取代winio.dll

目前流行的做法是使用winio模擬鍵盤硬件掃描碼,但是winio并不穩(wěn)定,時常有嚴重錯誤發(fā)生。使用keybd_event函數(shù),這種方法非常簡單,而且極為穩(wěn)定。

一、keybd_event使用

詳見:

https://www.cnblogs.com/xielong/p/6763121.html

//鍵盤事件

? ? ? ? #region bVk參數(shù) 常量定義

? ? ? ? public const byte vbKeyLButton = 0x1;? ? // 鼠標左鍵

? ? ? ? public const byte vbKeyRButton = 0x2;? ? // 鼠標右鍵

? ? ? ? public const byte vbKeyCancel = 0x3;? ? // CANCEL 鍵

? ? ? ? public const byte vbKeyMButton = 0x4;? ? // 鼠標中鍵

? ? ? ? public const byte vbKeyBack = 0x8;? ? ? // BACKSPACE 鍵

? ? ? ? public const byte vbKeyTab = 0x9;? ? ? ? // TAB 鍵

? ? ? ? public const byte vbKeyClear = 0xC;? ? ? // CLEAR 鍵

? ? ? ? public const byte vbKeyReturn = 0xD;? ? // ENTER 鍵

? ? ? ? public const byte vbKeyShift = 0x10;? ? // SHIFT 鍵

? ? ? ? public const byte vbKeyControl = 0x11;? // CTRL 鍵

? ? ? ? public const byte vbKeyAlt = 18;? ? ? ? // Alt 鍵? (鍵碼18)

? ? ? ? public const byte vbKeyMenu = 0x12;? ? ? // MENU 鍵

? ? ? ? public const byte vbKeyPause = 0x13;? ? // PAUSE 鍵

? ? ? ? public const byte vbKeyCapital = 0x14;? // CAPS LOCK 鍵

? ? ? ? public const byte vbKeyEscape = 0x1B;? ? // ESC 鍵

? ? ? ? public const byte vbKeySpace = 0x20;? ? // SPACEBAR 鍵

? ? ? ? public const byte vbKeyPageUp = 0x21;? ? // PAGE UP 鍵

? ? ? ? public const byte vbKeyEnd = 0x23;? ? ? // End 鍵

? ? ? ? public const byte vbKeyHome = 0x24;? ? ? // HOME 鍵

? ? ? ? public const byte vbKeyLeft = 0x25;? ? ? // LEFT ARROW 鍵

? ? ? ? public const byte vbKeyUp = 0x26;? ? ? ? // UP ARROW 鍵

? ? ? ? public const byte vbKeyRight = 0x27;? ? // RIGHT ARROW 鍵

? ? ? ? public const byte vbKeyDown = 0x28;? ? ? // DOWN ARROW 鍵

? ? ? ? public const byte vbKeySelect = 0x29;? ? // Select 鍵

? ? ? ? public const byte vbKeyPrint = 0x2A;? ? // PRINT SCREEN 鍵

? ? ? ? public const byte vbKeyExecute = 0x2B;? // EXECUTE 鍵

? ? ? ? public const byte vbKeySnapshot = 0x2C;? // SNAPSHOT 鍵

? ? ? ? public const byte vbKeyDelete = 0x2E;? ? // Delete 鍵

? ? ? ? public const byte vbKeyHelp = 0x2F;? ? ? // HELP 鍵

? ? ? ? public const byte vbKeyNumlock = 0x90;? // NUM LOCK 鍵

? ? ? ? //常用鍵 字母鍵A到Z

? ? ? ? public const byte vbKeyA = 65;

? ? ? ? public const byte vbKeyB = 66;

? ? ? ? public const byte vbKeyC = 67;

? ? ? ? public const byte vbKeyD = 68;

? ? ? ? public const byte vbKeyE = 69;

? ? ? ? public const byte vbKeyF = 70;

? ? ? ? public const byte vbKeyG = 71;

? ? ? ? public const byte vbKeyH = 72;

? ? ? ? public const byte vbKeyI = 73;

? ? ? ? public const byte vbKeyJ = 74;

? ? ? ? public const byte vbKeyK = 75;

? ? ? ? public const byte vbKeyL = 76;

? ? ? ? public const byte vbKeyM = 77;

? ? ? ? public const byte vbKeyN = 78;

? ? ? ? public const byte vbKeyO = 79;

? ? ? ? public const byte vbKeyP = 80;

? ? ? ? public const byte vbKeyQ = 81;

? ? ? ? public const byte vbKeyR = 82;

? ? ? ? public const byte vbKeyS = 83;

? ? ? ? public const byte vbKeyT = 84;

? ? ? ? public const byte vbKeyU = 85;

? ? ? ? public const byte vbKeyV = 86;

? ? ? ? public const byte vbKeyW = 87;

? ? ? ? public const byte vbKeyX = 88;

? ? ? ? public const byte vbKeyY = 89;

? ? ? ? public const byte vbKeyZ = 90;

? ? ? ? //數(shù)字鍵盤0到9

? ? ? ? public const byte vbKey0 = 48;? ? // 0 鍵

? ? ? ? public const byte vbKey1 = 49;? ? // 1 鍵

? ? ? ? public const byte vbKey2 = 50;? ? // 2 鍵

? ? ? ? public const byte vbKey3 = 51;? ? // 3 鍵

? ? ? ? public const byte vbKey4 = 52;? ? // 4 鍵

? ? ? ? public const byte vbKey5 = 53;? ? // 5 鍵

? ? ? ? public const byte vbKey6 = 54;? ? // 6 鍵

? ? ? ? public const byte vbKey7 = 55;? ? // 7 鍵

? ? ? ? public const byte vbKey8 = 56;? ? // 8 鍵

? ? ? ? public const byte vbKey9 = 57;? ? // 9 鍵

? ? ? ? public const byte vbKeyNumpad0 = 0x60;? ? //0 鍵

? ? ? ? public const byte vbKeyNumpad1 = 0x61;? ? //1 鍵

? ? ? ? public const byte vbKeyNumpad2 = 0x62;? ? //2 鍵

? ? ? ? public const byte vbKeyNumpad3 = 0x63;? ? //3 鍵

? ? ? ? public const byte vbKeyNumpad4 = 0x64;? ? //4 鍵

? ? ? ? public const byte vbKeyNumpad5 = 0x65;? ? //5 鍵

? ? ? ? public const byte vbKeyNumpad6 = 0x66;? ? //6 鍵

? ? ? ? public const byte vbKeyNumpad7 = 0x67;? ? //7 鍵

? ? ? ? public const byte vbKeyNumpad8 = 0x68;? ? //8 鍵

? ? ? ? public const byte vbKeyNumpad9 = 0x69;? ? //9 鍵

? ? ? ? public const byte vbKeyMultiply = 0x6A;? // MULTIPLICATIONSIGN(*)鍵

? ? ? ? public const byte vbKeyAdd = 0x6B;? ? ? ? // PLUS SIGN(+) 鍵

? ? ? ? public const byte vbKeySeparator = 0x6C;? // ENTER 鍵

? ? ? ? public const byte vbKeySubtract = 0x6D;? // MINUS SIGN(-) 鍵

? ? ? ? public const byte vbKeyDecimal = 0x6E;? ? // DECIMAL POINT(.) 鍵

? ? ? ? public const byte vbKeyDivide = 0x6F;? ? // DIVISION SIGN(/) 鍵

? ? ? ? //F1到F12按鍵

? ? ? ? public const byte vbKeyF1 = 0x70;? //F1 鍵

? ? ? ? public const byte vbKeyF2 = 0x71;? //F2 鍵

? ? ? ? public const byte vbKeyF3 = 0x72;? //F3 鍵

? ? ? ? public const byte vbKeyF4 = 0x73;? //F4 鍵

? ? ? ? public const byte vbKeyF5 = 0x74;? //F5 鍵

? ? ? ? public const byte vbKeyF6 = 0x75;? //F6 鍵

? ? ? ? public const byte vbKeyF7 = 0x76;? //F7 鍵

? ? ? ? public const byte vbKeyF8 = 0x77;? //F8 鍵

? ? ? ? public const byte vbKeyF9 = 0x78;? //F9 鍵

? ? ? ? public const byte vbKeyF10 = 0x79;? //F10 鍵

? ? ? ? public const byte vbKeyF11 = 0x7A;? //F11 鍵

? ? ? ? public const byte vbKeyF12 = 0x7B;? //F12 鍵

? ? ? ? #endregion

? ? ? ? #region 引用win32api方法

? ? ? ? /// <summary>

? ? ? ? /// 導入模擬鍵盤的方法

? ? ? ? /// </summary>

? ? ? ? /// <param name="bVk" >按鍵的虛擬鍵值</param>

? ? ? ? /// <param name= "bScan" >掃描碼,一般不用設置,用0代替就行</param>

? ? ? ? /// <param name= "dwFlags" >選項標志:0:表示按下,2:表示松開</param>

? ? ? ? /// <param name= "dwExtraInfo">一般設置為0</param>

? ? ? ? [DllImport("user32.dll")]

? ? ? ? public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

? ? ? ? #endregion

調(diào)用:

//模擬按下A鍵

? ? ? ? ? ? keybd_event(vbKeyA, 0, 0, 0);

? ? ? ? ? ? //模擬松開A鍵

? ? ? ? ? ? keybd_event(vbKeyA, 0, 2, 0);


二、mouse_event使用

詳見:

http://blog.sina.com.cn/s/blog_71d894bd01013goa.html

//鼠標事件

? ? ? ? private readonly int MOUSEEVENTF_LEFTDOWN = 0x0002;//模擬鼠標移動

? ? ? ? private readonly int MOUSEEVENTF_MOVE = 0x0001;//模擬鼠標左鍵按下

? ? ? ? private readonly int MOUSEEVENTF_LEFTUP = 0x0004;//模擬鼠標左鍵抬起

? ? ? ? private readonly int MOUSEEVENTF_ABSOLUTE = 0x8000;//鼠標絕對位置

? ? ? ? private readonly int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模擬鼠標右鍵按下

? ? ? ? private readonly int MOUSEEVENTF_RIGHTUP = 0x0010; //模擬鼠標右鍵抬起

? ? ? ? private readonly int MOUSEEVENTF_MIDDLEDOWN = 0x0020; //模擬鼠標中鍵按下

? ? ? ? private readonly int MOUSEEVENTF_MIDDLEUP = 0x0040;// 模擬鼠標中鍵抬起

? ? ? ? [DllImport("user32")]

? ? ? ? public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

? ? ? ? //自定義鼠標移動事件

? ? ? ? private void mouse_yd(int x, int y)

? ? ? ? {

? ? ? ? ? ? mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x * 65535 / 1600, y * 65535 / 900, 0, 0);//移動到需要點擊的位置

? ? ? ? }

? ? ? ? //自定義鼠標左鍵單擊

? ? ? ? private void mouse_dj()

? ? ? ? {

? ? ? ? ? ? int x = Cursor.Position.X;

? ? ? ? ? ? int y = Cursor.Position.Y;

? ? ? ? ? ? mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, x * 65535 / 1600, y * 65535 / 900, 0, 0);//點擊

? ? ? ? ? ? mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE, x * 65535 / 1600, y * 65535 / 900, 0, 0);//抬起

? ? ? ? }

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 給自己的總是很多期待,期待更多的美好的回憶,我不要現(xiàn)在,不求飛黃騰達,只求讓自己心安理得的面對很多事情,秋天一轉眼...
    一個人的光陰閱讀 471評論 0 2
  • 1-------- 走進前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥閱讀 2,430評論 0 34
  • 昨天深夜,女星景甜在微博上發(fā)文“想你的兔zhi”,并配上6張自拍照,沒想到體育界男神張繼科居然在下面點贊評論,“兔...
    五幻巧閱讀 671評論 0 0
  • 營銷而已! 營銷而已! 營銷而已! 古天樂前晚出席名表活動獲大會贈送名表,當他拿上手給傳媒拍照時竟一時失手,名表直...
    納雪風閱讀 617評論 0 0
  • 感恩邵總一天輕松喜悅自然無痕的生命智慧的分享,感恩自己有福報到達現(xiàn)場沐浴智慧。 由于帶孩子在場內(nèi)待不住,我相信我錯...
    寸心潔白閱讀 153評論 1 1

友情鏈接更多精彩內(nèi)容