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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
ナムアニクラウド
記事: 16
登録日時: 14年前
住所: 茨城県

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

#1

投稿記事 by ナムアニクラウド » 14年前

 VisualC#でDXライブラリを利用しています。

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 14年前

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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
ナムアニクラウド
記事: 16
登録日時: 14年前
住所: 茨城県

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

#3

投稿記事 by ナムアニクラウド » 14年前

他の場所でもいろいろ質問したり、根気よくググッたところ、なんとか実現することができました。
ひとまず解決とします。お世話になりました。

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

閉鎖

“C言語何でも質問掲示板” へ戻る