问题描述
让我更具体一点。
我正在尝试模拟正在使用的游戏宏机器人中的向前走...
此游戏通过我的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上运行