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指令 }
  • 相关阅读:
    Cake
    抽屉评论数据库设计
    学习网站
    栈和堆简介
    链表相关操作
    链表操作
    Django form验证二
    django ajax提交form表单数据
    jquery中 after append appendTo 的区别
    Python json.dumps 自定义序列化操作
  • 原文地址:https://www.cnblogs.com/pecool/p/12009643.html
Copyright © 2011-2022 走看看