Windowsコード集 上のページ

#0019 マウスの自動移動

チューチューマウスと言えば分かると思いますが、ああいったマウスの自動移動を行うための関数です。
移動速度を与えられ、コールバックにも対応しているので、比較的利用度は高いかもしれません。

// コールバック関数のプロトタイプ
typedef BOOL (CALLBACK *LPCALLBACK_MOVEMOUSE)(LONG x,LONG y,LPVOID parm);

//-----------------------------------------------------------------------------
// マウス移動
//-----------------------------------------------------------------------------
// BOOL MoveMouse(
//   LONG x,                    // 移動位置X
//   LONG y,                    // 移動位置Y
//   LONG pps,                  // 移動速度(毎秒ピクセル数)
//   LPCALLBACK_MOVEMOUSE cb,   // コールバック関数のポインタ
//   LPVOID parm                // コールバック関数のパラメータ
// );
//
// コールバック関数へは、座標(x,y)と任意のパラメータ(parm)が渡される。
// 関数の返値がFALSEのときこの関数は強制終了し、返値はFALSEとなる。
//-----------------------------------------------------------------------------
BOOL MoveMouse(LONG x,LONG y,LONG pps,LPCALLBACK_MOVEMOUSE cb,LPVOID parm)
{
    POINT point;
    LONG xx,yy,mov,movtimes,timorg,timwrk,mx,my;

    // 現在の位置を取得し、各軸の移動距離と斜め移動距離を求める
    GetCursorPos(&point);
    xx = x - point.x;
    yy = y - point.y;
    mov = (LONG)sqrt(xx * xx + yy * yy);

    // 移動時間を求める
    movtimes = MulDiv(1000,mov,pps);

    // 移動ルーチン
    timorg = (LONG)GetTickCount();
    do{
        // 移動位置を計算
        if((timwrk = (LONG)GetTickCount() - timorg) >= movtimes){
            mx = x;
            my = y;
        }else{
            mx = point.x + MulDiv(xx,timwrk,movtimes);
            my = point.y + MulDiv(yy,timwrk,movtimes);
        }

        // マウス移動
        SetCursorPos(mx,my);

        // コールバック呼び出し
        if(cb != NULL){if(!cb(mx,my,parm))return FALSE;}
    }while(timwrk < movtimes);

    return TRUE;
}



// 以下は、簡単な使用例です。
// [100,100]座標にマウスカーソルを移動させます。

MoveMouse(100,100,2000,NULL,0);



上のページ