如何在C ++中模拟按下键

如何解决如何在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?