VC++ : マウスに正方形を描かせる

  デフォルトは相対座標ですが、絶対座標指定もあります




ブラウザでダウンロード

引数が無い場合は、一辺 200 ピクセルです。
使う場合は、ショートカットをデスクトップに置いて、ショートカットキーを登録して使います。

※ デスクトップのショートカットキーは、一般のアプリケーションのウインドウ上で有効です

実行を試す場合はこちらでどうぞ

Mouse_box

  
// *********************************************************
// ドラッグして正方形を描画する
// *********************************************************

#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;
}
  


関連する記事
【絶滅危惧】WINAPI+C : マウスの移動単位って【ミッキー】というんですね












  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ