|
// *********************************************************
// ドラッグして正方形を描画する
// *********************************************************
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <stdio.h>
#define MOUSE_ACTION 1
// このプログラムでは、配列は一つしか使いません
// ( マウスの操作上連続してやると速すぎて OS が感知できない
INPUT inmouse[MOUSE_ACTION];
MOUSEINPUT mi[MOUSE_ACTION];
// *********************************************************
// マウスの動作のみ
// *********************************************************
void ActMouse( DWORD type ) {
memset( mi, 0x00, sizeof( MOUSEINPUT ) * MOUSE_ACTION );
// マウスの処理順序を作成
mi[0].dwFlags = type;
inmouse[0].type = INPUT_MOUSE;
inmouse[0].mi = mi[0];
SendInput( MOUSE_ACTION, inmouse, sizeof( INPUT ) );
Sleep(10);
}
// *********************************************************
// マウスの移動
// *********************************************************
void ActMoveMouse( int x, int y ) {
memset( mi, 0x00, sizeof( MOUSEINPUT ) * MOUSE_ACTION );
// マウスの処理順序を作成
mi[0].dwFlags = MOUSEEVENTF_MOVE;
mi[0].dx = x;
mi[0].dy = y;
inmouse[0].type = INPUT_MOUSE;
inmouse[0].mi = mi[0];
SendInput( MOUSE_ACTION, inmouse, sizeof( INPUT ) );
Sleep(10);
}
// *********************************************************
// Windows アプリケーションとしてのエントリポイント
// Link.exe で /SUBSYSTEM:WINDOWS がデフォルトで
// 指定される事になります
// *********************************************************
int APIENTRY _tWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow
)
{
// ---------------------------------------------------------------
int num;
num = atoi( lpCmdLine );
if ( num == 0 ) {
// デフォルトは1辺200ピクセル
num = 200;
}
// マウスの1ミッキーを1ピクセルに変更する為の変数
int oldAccel[3], oldSpeed;
int newAccel[3], newSpeed;
BOOL bResult;
// 以下の値でマウスの移動量を 1 ミッキー/ピクセルに設定する
newAccel[0] = 0;
newAccel[1] = 0;
newAccel[2] = 0;
newSpeed = 1;
// 現在のマウス加速度定数を保存する
SystemParametersInfo(SPI_GETMOUSE, 0, oldAccel, 0);
SystemParametersInfo(SPI_GETMOUSESPEED, 0, &oldSpeed, 0);
// マウスを設定する
SystemParametersInfo(SPI_SETMOUSE, 0, newAccel,
SPIF_SENDCHANGE);
SystemParametersInfo(SPI_SETMOUSESPEED, 0, &newSpeed,
SPIF_SENDCHANGE);
// しばらく待つ
// プログラム開始時のみ 0.5 秒
// ( たぶん砂時計カーソルになるので開始が解りやすい )
Sleep(500);
// ドラッグして正方形を描く
ActMouse( MOUSEEVENTF_LEFTDOWN );
ActMoveMouse( 0, num );
ActMoveMouse( num, 0 );
ActMoveMouse( 0, num * -1 );
ActMoveMouse( num * -1, 0 );
ActMouse( MOUSEEVENTF_LEFTUP );
// 保存したマウス設定を元に戻す
bResult = SystemParametersInfo(SPI_SETMOUSE,0, oldAccel,
SPIF_SENDCHANGE);
bResult = SystemParametersInfo(SPI_SETMOUSESPEED, 0, &oldSpeed,
SPIF_SENDCHANGE);
return 0;
}
| |