C++ 按键和鼠标监听,自动化

C++ 按键和鼠标监听,自动化,c++,python,keyboard,mouse,capture,C++,Python,Keyboard,Mouse,Capture,我期待着创建一个覆盖的战略游戏称为沙丘2000。令人恼火的是,要创建10名士兵,你必须在每次完成一名士兵时单击图标。没有排队。 因此,在不影响游戏运行的情况下,我想听听鼠标的移动,当在XY位置单击时,我想重复十次,中间有正确的时间。有任何库允许我这样做吗?下面是右鼠标按钮的自动点击代码。供鼠标左键使用 mouse\u事件(MOUSEEVENTF\u LEFTDOWN,0,0,0)和鼠标事件(MOUSEEVENTF_LEFTUP,0,0,0) #include <windows.h>

我期待着创建一个覆盖的战略游戏称为沙丘2000。令人恼火的是,要创建10名士兵,你必须在每次完成一名士兵时单击图标。没有排队。
因此,在不影响游戏运行的情况下,我想听听鼠标的移动,当在XY位置单击时,我想重复十次,中间有正确的时间。有任何库允许我这样做吗?

下面是右鼠标按钮的自动点击代码。供鼠标左键使用
mouse\u事件(MOUSEEVENTF\u LEFTDOWN,0,0,0)
鼠标事件(MOUSEEVENTF_LEFTUP,0,0,0)

#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

bool KeyIsPressed( unsigned char k )
{
    USHORT status = GetAsyncKeyState( k );
    return (( ( status & 0x8000 ) >> 15 ) == 1) || (( status & 1 ) == 1);
}

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE P, LPSTR CMD, int nShowCmd )
{

    MessageBox( NULL, "[CTRL] + [SHIFT] + [HOME]: Start/Pause\n [CTRL] + [SHIFT] + [END]: Quit", "Instructions", NULL );
    HWND target = GetForegroundWindow();

    POINT pt;
    RECT wRect;
    int delay;
    bool paused = true;

    srand( time(NULL) );

    while ( 1 )
    {
        if ( KeyIsPressed( VK_CONTROL ) && KeyIsPressed( VK_SHIFT ) && KeyIsPressed( VK_HOME ) )
        {
            paused = !paused;
            if ( paused )
            {
                MessageBox( NULL, "Paused.", "Notification", NULL );
            }
            else
            {
                cout << "Unpaused.\n";
                target = GetForegroundWindow();
                cout << "Target window set.\n";
            }
            Sleep( 1000 );
        }

        // Shutdown.
        if ( KeyIsPressed( VK_CONTROL ) && KeyIsPressed( VK_SHIFT ) && KeyIsPressed( VK_END ) )
        {
            MessageBox( NULL, "AutoClicker Shutdown.", "Notification", NULL );
            break;
        }

        if ( paused == false && GetForegroundWindow() == target )
        {
            GetCursorPos( &pt );
            GetWindowRect( target, &wRect );

            // Make sure we are inside the target window.
            if ( pt.x > wRect.left && pt.x < wRect.right && pt.y > wRect.top && pt.y < wRect.bottom )
            {
                mouse_event( MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0 );
                mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 );
            }
            delay = (rand() % 3 + 1) * 100;
            Sleep( delay );
        }
    }

    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
布尔键显示(无符号字符k)
{
USHORT status=GetAsyncKeyState(k);
返回((状态&0x8000)>>15)==1)| |((状态&1)==1);
}
int-WINAPI-WinMain(HINSTANCE-hInst、HINSTANCE-P、LPSTR-CMD、int-nShowCmd)
{
MessageBox(NULL,“[CTRL]+[SHIFT]+[HOME]:开始/暂停\n[CTRL]+[SHIFT]+[END]:退出”,“说明”,NULL);
HWND target=GetForegroundWindow();
点pt;
直肌;
整数延迟;
布尔暂停=真;
srand(时间(空));
而(1)
{
if(按键按下(VK_控制)和按键按下(VK_移位)和按键按下(VK_HOME))
{
暂停=!暂停;
如果(暂停)
{
MessageBox(NULL,“暂停”,“通知”,NULL);
}
其他的
{
cout wRect.top和pt.y
你在Windows上吗?谷歌搜索
WH\u MOUSE\u LL
WH\u KEYBOARD\u LL
。你应该看看,它可能是一个更适合这类任务的工具。你是在寻找一个机器学习应用程序,还是在需要时启动脚本而不需要任何学习过程?只是一种鼠标和键盘的自动化eyboard,但仍有用户的输入。例如,每秒钟鼠标都会记住其位置,跳转到某些XY点,然后返回允许用户再次输入。我相信您已经自己发现了这一点,但对于任何偶然发现这一问题的人来说:这种事情通常被视为作弊。