ページ 11

ウィンドウ外でのマウスクリックを監視したいです

Posted: 2011年4月03日(日) 15:32
by ナムアニクラウド
 VisualC#でDXライブラリを利用しています。

 ふと、デスクトップに万歩計のようなものを置きたいなあと思って、じゃあ何を計るの?と思ったとき、「そうだ、クリック数を計ろう」とひらめきました。
ブラウザの「戻る」ボタンを押す時、ウィンドウの×ボタンを押す時などのクリック数を歩数に置き換えてみようかと。

 しかしDXライブラリでクリックを取得しようとしても、ウィンドウが非アクティブの時はクリックの状態は得られません。
マウスフックとか、いろいろと調べてはみたものの、DXライブラリと併用できそうな方法は考えつきませんでした。
DXライブラリのウィンドウ外でのマウスクリックの状態を得る方法はありますか?

Re: ウィンドウ外でのマウスクリックを監視したいです

Posted: 2011年4月03日(日) 15:39
by みけCAT
Win32 APIのGetAsyncKeyState関数はどうですか?

コード:

#include "DxLib.h"

char Key[256];

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
	SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定

	int white=GetColor(255,255,255);

	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
		//↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない

		//ココに処理を書いていく
		if(GetAsyncKeyState(VK_LBUTTON) & 0x8000)
			DrawString(100,100,"左",white);
		if(GetAsyncKeyState(VK_RBUTTON) & 0x8000)
			DrawString(100,150,"右",white);
		if(GetAsyncKeyState(VK_MBUTTON) & 0x8000)
			DrawString(100,200,"中央",white);

		ScreenFlip();//裏画面を表画面に反映
	}

	DxLib_End();
	return 0;
}

Re: ウィンドウ外でのマウスクリックを監視したいです

Posted: 2011年4月03日(日) 22:28
by ナムアニクラウド
他の場所でもいろいろ質問したり、根気よくググッたところ、なんとか実現することができました。
ひとまず解決とします。お世話になりました。

グローバルフックによって実装することにしました。
「.NETはグローバルフックをサポートしていない」とのことでしたが、
キーボードとマウス入力のフックはできるそうなので、その方法で実装しました。