0

Dune 2000という戦略ゲームのオーバーレイを作成しようとしています。10人の兵士を作成するには、1人が完了するたびにアイコンをクリックする必要があるのは面倒です。キューはありません。ですから、ゲームの仕組みを邪魔することなく、マウスの動きを聞きたいのですが、XYの位置でクリックしたときに、たとえば10回、適切なタイミングで繰り返してみたいと思います。それを可能にするライブラリはありますか?

4

1 に答える 1

2

以下は、マウスの右ボタンのオートクリッカーコードです。マウスの左ボタンには、とを使用 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, 0, 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;
}
于 2012-08-22T14:10:57.790 に答える