C++ 如何在C++;

C++ 如何在C++;,c++,macros,keyboard,bots,sendinput,C++,Macros,Keyboard,Bots,Sendinput,让我更具体一点 我正试图模拟在我正在开发的游戏宏机器人中向前行走 这个游戏是通过我的Chrome浏览器运行的。我需要这段代码来完成的就是在记事本中生成“wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 据我所知,这不是兼容性错误,而是逻辑错误… 下面是我的路障的一个简单示例: #include <windows.h> void keyPress(WORD keyCode) { IN

让我更具体一点

我正试图模拟在我正在开发的游戏宏机器人中向前行走

这个游戏是通过我的Chrome浏览器运行的。我需要这段代码来完成的就是在记事本中生成“wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

据我所知,这不是兼容性错误,而是逻辑错误…

下面是我的路障的一个简单示例:

#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, &input, sizeof(input)); // Release key?
}

int main()
{
    keyPress(0x57); // 0x57 = W key code
    return 0;
}

#包括
无效按键(字键码)
{
输入;
input.type=输入\键盘;
input.ki.wVk=keyCode;
input.ki.dwFlags=0;
SendInput(1,&input,sizeof(input));//按键?
Sleep(3000);//按键应该保持3秒钟,但不是吗??
input.ki.dwFlags=KEYEVENTF\u KEYUP;
SendInput(1,&input,sizeof(input));//释放键?
}
int main()
{
按键(0x57);//0x57=W键代码
返回0;
}
SendInput()似乎是用于按键模拟的函数,但如果我要使用其他函数,请与大家分享


谢谢。

解决方案:好的,通过进一步的经验,我的原始代码的问题似乎是我的dwFlags中缺少KEYEVENTF\u扫描代码。似乎有一种潜在的关系需要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, &input, 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;
}
#包括
无效按键(字键码)
{
输入;
input.type=输入\键盘;
input.ki.wScan=keyCode;
input.ki.dwFlags=KEYEVENTF\u扫描码;
SendInput(1,&input,sizeof(input));
}
无效密钥释放(字密钥码)
{
输入;
input.type=输入\键盘;
input.ki.wScan=keyCode;
input.ki.dwFlags=KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1,&input,sizeof(input));
}
int main()
{
睡眠(5000);//暂停打开浏览器选项卡的时间
按键(0x24);//按键
睡眠(1000);//按住键x毫秒
密钥释放(0x24);//释放密钥
返回0;
}
我很困惑为什么扫描代码与微软提供的代码不一致(“0x25”是向下箭头而不是“0x28”?),所以如果有人对此有所了解,那就太好了

解决方案编辑:我的键码没有对齐的原因是我需要使用扫描码。我有一些愚蠢的运气,因为我正在玩的游戏也使用IJKL作为箭头键,所以看起来好像代码被几个数字抵消了,而实际上它一直在按字母键。所以基本上我需要做的就是使用这些扫描代码来移动:0x17=“I”0x24=“J”0x25=“K”0x26=“L”

我希望这能帮助像我一样迷路的人(:


< P>,Pro Tip,Python中的代码宏BOTS,它不太令人头痛。我放弃C++代码,在2天晚上在python上运行了我的代码

如果你的真正代码还没有这样做,请确保你添加错误检查。当你关注一个特定的应用程序时,你也不需要一个全局输入函数。@克里斯有一个对于如何解决这个问题,你有什么建议?它真的很让人沮丧,因为C++是如此的困难,就像我要翻转到java一样,我会在10分钟内完成这些函数的文档的API函数的返回值。你不需要猜测哪一个调用失败,如果有的话,或者为什么。