如何解决如何在C ++中模拟按下键
让我更具体一点。
我正在尝试模拟正在使用的游戏宏机器人中的向前走...
此游戏通过我的Chrome浏览器运行。我需要用此代码来完成的工作是在记事本中或由于按住键而产生“ wwwwwwwwwwwwww”。
这是我的路障的一个简单例子:
#include <windows.h>
void keyPress(WORD keyCode)
{
INPUT input;
input.type = INPUT_KEYBOARD;
input.ki.wVk = keyCode;
input.ki.dwFlags = 0;
sendinput(1,&input,sizeof(input)); // Press key?
Sleep(3000); // Key suppose to be held for 3 seconds but isnt??
input.ki.dwFlags = KEYEVENTF_KEYUP;
sendinput(1,sizeof(input)); // Release key?
}
int main()
{
keyPress(0x57); // 0x57 = W key code
return 0;
}
sendinput()似乎是用于按键模拟的函数,但是如果我要使用其他功能,请分享!
谢谢。
解决方法
解决方案:好的,通过进一步的经验,似乎我原始代码的问题是dwFlags中缺少KEYEVENTF_SCANCODE。似乎存在一种基础关系,需要KEYEVENTF_SCANCODE标志才能至少在Chrome(可能是系统范围内)中按住箭头键。因此,这是一个简单的解决方案:
#include <windows.h>
void keyPress(WORD keyCode)
{
INPUT input;
input.type = INPUT_KEYBOARD;
input.ki.wScan = keyCode;
input.ki.dwFlags = KEYEVENTF_SCANCODE;
SendInput(1,&input,sizeof(INPUT));
}
void keyRelease(WORD keyCode)
{
INPUT input;
input.type = INPUT_KEYBOARD;
input.ki.wScan = keyCode;
input.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1,sizeof(INPUT));
}
int main()
{
Sleep(5000); // pause time to open browser tab
keyPress(0x24); // press key
Sleep(1000); // hold key for x milliseconds
keyRelease(0x24); // release key
return 0;
}
我很困惑,为什么扫描代码无法与Microsoft提供的代码一致(“ 0x25”是向下箭头而不是“ 0x28”?),所以如果有人对此有所了解,那很棒。
解决方案编辑:我的键码未排列的原因是因为我需要使用扫描码。我运气不好,因为我正在打游戏的游戏也使用IJKL作为箭头键,所以看起来好像代码总是偏离了几个数字,而实际上却一直按字母键。因此,基本上我要做的就是使用这些扫描代码移动:0x17 =“ I” 0x24 =“ J” 0x25 =“ K” 0x26 =“ L”
我希望这可以帮助像我一样迷失的人(:
也是专家提示,用python编写宏bot,它的麻烦要小得多。我放弃了c ++代码,并在2个晚上使代码在python上运行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。