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指令 }
原文地址:https://www.cnblogs.com/pecool/p/12009643.html