忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

マウスが左利き設定になっているかどうかを調べるには?

XNAのMouseStateはマウスが左利きの設定になっているかどうかを考慮しません。
常に物理的なマウスのボタンの状態を保持しています。

そのため、単に「クリックしたときに弾が出る」ようにプログラムすると、左利きの人にとっては「右クリックしたときに弾が出る」ようになるのです。(完全に余談ですが、ぼくは左利きで、こういう事態に陥ったとき非常に腹が立ちます。まったくもう!)

これを避けるためには、マウスが左利き用になっているかどうかを調べる必要があります。

この方法を2つ紹介します。

ひとつは、WPFの、SystemParameters.SwapButtonsプロパティを使う方法です。

public static bool SwapButtons { get; }

このプロパティはマウスのボタンがひっくり返っているか否かを返します。
つまり左利きならtrue、右利きならfalseです。
class MouseCheck
{
	static void Main()
	{
		if(System.Windows.SystemParameters.SwapButtons)
		{System.Console.WriteLine("左利き設定です");}
		else
		{System.Console.WriteLine("右利き設定です");}
	}
}

別の方法もあります。
わざわざ.Net Framework 3.0への依存性を持ちたくない場合は
こっちを使うといいかもしれません。

Win32APIのGetSystemMetrics関数を使います(user32.dll)。

int GetSystemMetrics(int nIndex);

これはシステムの設定を得る関数で、
引数にどの設定を得たいかを指定します。

ここではマウスのボタンの設定がひっくり返っているかを調べる、
SM_SWAPBUTTONを使います。
(使うといってもC#のInteropServicesを使うので
名前はどうでもいいんですけどね)


SM_SWAPBUTTON

値:23

この関数は左利き用だと1を返します。
サンプルはこんなです。
class MouseCheck
{
	[System.Runtime.InteropServices.DllImport("user32")]
	static extern int GetSystemMetrics(int nIndex);
	const int SM_SWAPBUTTON = 23;

	static void Main()
	{
		if(GetSystemMetrics(SM_SWAPBUTTON) == 1)
		{System.Console.WriteLine("左利き設定です");}
		else
		{System.Console.WriteLine("右利き設定です");}
	}
}




拍手[0回]

PR