对于大多程序模拟按键使用下面的代码就可以胜任。但是换成游戏就不行了。
键盘的原理是向操作系统的键盘驱动程序发送扫描码,下面的代码就是通过winio这个免费的lib实现直接向驱动程序发送数据来实现模拟按键。几乎试用于Windows下的所有程序。
有一点需要注意,对于扩展键需要额外发送命令。
keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
键盘的原理是向操作系统的键盘驱动程序发送扫描码,下面的代码就是通过winio这个免费的lib实现直接向驱动程序发送数据来实现模拟按键。几乎试用于Windows下的所有程序。
有一点需要注意,对于扩展键需要额外发送命令。
bool bResult;
// Call InitializeWinIo to initialize the WinIo library.
bResult = InitializeWinIo();//刚开始这个地方老是加载不成功,大家跑的时候如果不成功注意一下子这个地方
if (bResult) {
// Under Windows NT/2000/XP, after calling InitializeWinIo,
// you can call _inp/_outp instead of using GetPortVal/SetPortVal
UINT vkCode = MapVirtualKey(VK_LWIN, 0);
KbcWait4Ibe();
SetPortVal(0x64, 0xd2, 1); // 非扩展键不用写这条语句
KbcWait4Ibe();
SetPortVal(0x60, 0xe0, 1); // 非扩展键不用写这条语句
KbcWait4Ibe();
SetPortVal(0x64, 0xd2, 1);
KbcWait4Ibe();
SetPortVal(0x60, vkCode, 1);
Sleep(5);
KbcWait4Ibe();
SetPortVal(0x64, 0xd2, 1); // 非扩展键不用写这条语句
KbcWait4Ibe();
SetPortVal(0x60, 0xe0, 1); // 非扩展键不用写这条语句
KbcWait4Ibe();
SetPortVal(0x64, 0xd2, 1);
KbcWait4Ibe();
SetPortVal(0x60, vkCode | 0x80, 1);
ShutdownWinIo();
}
刚开始自己加载WinIO驱动的时候老是不成功,给大家上传一个可以跑的,看看他的配置等内容。新版WinIO不大会用,大家可以试试这个老版的。
刚才上传居然上传正确但是没有找到,大家也可以自己搜索下载。有的是,主要是把那三个文件放好位置就可以了。