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