システム全体で特定のキーが押されているかを調べる


自分のウィンドウでキーボードが押されればもちろん確認できますよね
でしたら、自分のウィンドウにフォーカスが無い時、もしくは他のウィンドウで操作中に
特定のキーが押されてるかどうか確認する方法を試してみたいと思います。


そのために GetAsyncKeyState(仮想キーコード) という関数を使用します
この関数は、前回の GetAsyncKeyState 関数呼び出し以降に目的のキーが押されたかどうかを判定する関数です

仮想キーコードは、WINUSER.H ヘッダファイルで記載されています。
WINUSER.Hを開いて、VK_ で検索すると容易に見つかります。
ほぼ総てのキーボードのキーを網羅しています

以下のプログラムでは、自アプリケーションにフォーカスが有ろうが無かろうが、
CTRL/ALT/SHIFT/マウス左ボタン/マウス右ボタン/A/1 が押されたこと確認できます。



#include <stdio.h>
#include <windows.h>

int main(){
	while(1){
		//仮想キーコードは、WINUSER.H ヘッダファイルで記載されている

		if(GetAsyncKeyState (VK_CONTROL)){
			//CTRLキーが押されている
			printf("CTRL\n");
		}
		if(GetAsyncKeyState (VK_MENU)){
			//ALTが押されている
			printf("ALT\n");
		}
		if(GetAsyncKeyState (VK_SHIFT)){
			//SHIFTが押されている
			printf("SHIFT\n");
		}
		if(GetAsyncKeyState (VK_LBUTTON)){
			//マウス左ボタンが押されている
			printf("Mouse Left\n");
		}
		if(GetAsyncKeyState (VK_RBUTTON)){
			//マウス右ボタンが押されている
			printf("Mouse Right\n");
		}
		if(GetAsyncKeyState ('A')){
			//Aキーが押されている
			printf("A\n");
		}
		if(GetAsyncKeyState ('1')){
			//1が押されている
			printf("1\n");
		}
		Sleep(10);
	}
	return 0;
}







▲トップページ > Windows と C++