转自在游戏中使用keybd_event的问题

今天发现在游戏中,keybd_event不能使用,结果发现游戏是使用directinput实现读取键盘的,关键还是扫描码的问题,我抄了一段老外的代码,经测试有效(在金庸中测试重复输入空格):

#include <iostream>
#include <windows.h>
// for key pushing
BYTE scan_code(DWORD pKey)
{
const DWORD result = MapVirtualKey(pKey, MAPVK_VK_TO_VSC);
return static_cast<BYTE>(result);
}
void press_key(DWORD pKey)
{
keybd_event(static_cast<BYTE>(pKey), scan_code(pKey), 0, 0);
}
void release_key(DWORD pKey)
{
keybd_event(static_cast<BYTE>(pKey), scan_code(pKey), KEYEVENTF_KEYUP, 0);
}
// for testing
#define PRESS(x) press_key(x); std::cout << "Press: " #x << std::endl
#define RELEASE(x) release_key(x); std::cout << "Release: " #x << std::endl
// test
int main(void)
{
for (;;)
{
PRESS(VK_LEFT);
Sleep(10); // hold it for 1/100'th of a second
RELEASE(VK_LEFT);
Sleep(1000); // wait for a second
PRESS(VK_RIGHT);
Sleep(10); // hold it for 1/100'th of a second
RELEASE(VK_RIGHT);
Sleep(1000); // wait for a second
}
}

最新文章

  1. ABP理论学习之仓储
  2. spring源码分析之cache注解
  3. thrift 一个有意思的特性:Class名称无关性
  4. 快考试了,尽快写完HashTable。
  5. hdu 3487 Play with Chain
  6. layout_weight
  7. proxy set 拦截
  8. windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展
  9. unrecognized font family &quot;iconfont2&quot;
  10. win7 使用anaconda安装tensorflow并且在jupyter notebook上启动
  11. DriverStudio 和 WDF驱动 通过GUID获取设备句柄的差别
  12. 【HTTP原理】TCP/IP三次握手和四次挥手
  13. Neutron server的运行原理(未完待续)
  14. Android人脸检测1(静态图片)
  15. python之字典的增删改查
  16. Android必学之数据适配器BaseAdapter
  17. 关于Oracle 10.2.0.5 版本应用SCN补丁14121009相关问题
  18. [UE4]记录瞬移目标点
  19. php字符串转成数组
  20. linux内核模块的安全

热门文章

  1. 【排障】使用DiskGenius修复0扇区损坏
  2. JQuery对象与DOM对象分析
  3. SQLServe错误整理
  4. ThinkPHP函数详解:A方法
  5. 更靠谱的js判断浏览器及其版本
  6. 从URI中获取实际的文件path
  7. MVC小系列(三)【MVC的分部视图】
  8. Android设计模式系列
  9. Jquery CheckBox复选框 全选/取消全选 最佳实现方式 参考案例
  10. leetcode342——Power of Four(C++)