zoukankan      html  css  js  c++  java
  • keybd_event 在F按键系列不起作用的解决办法

    最近给公司做自动化测试工具,主要用到的功能是模拟鼠标键盘录制回放。一切都很完美了,但在客户大机系统上使用的时候,发现F1-F24系列按键无法正确使用,查了很多资料,主要有2个方面的原因:

    1、一些游戏公司他们的程序使用winio绕过了windows系统的保护机制,因此keybd_event对此类软件无效果。

    2、因为各个硬件厂家(键盘、鼠标)在指定scancode(扫描码)的时候,会有所不同。keybd_event在发送指令的时候,无法对应到指定的硬件扫描码,导致发送信息发送失败。

    此次,我的这个问题属于第二种。解决措施就是通过虚拟码,得到扫描码。

         
    [DllImport("user32.dll")] static extern void keybd_event(byte key, byte scan, int flags, int extraInfo); [DllImport("user32.dll")] static extern int MapVirtualKey(uint uCode, uint uMapType);
    public static void KeyDown(Keys key) { int scanCode = MapVirtualKey(ParseKey(key), 0); //虚拟码转换扫描码 keybd_event(ParseKey(key), (byte)scanCode, 0, 0);  //发送键盘keydown指令 }
  • 相关阅读:
    141. Linked List Cycle【easy】
    237. Delete Node in a Linked List【easy】
    234. Palindrome Linked List【easy】
    排序_归并排序
    排序_选择排序
    排序_快速排序
    排序_冒泡排序
    排序_希尔排序
    排序_插入排序
    121. Best Time to Buy and Sell Stock【easy】
  • 原文地址:https://www.cnblogs.com/pecool/p/12009643.html
Copyright © 2011-2022 走看看