C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 124 を表示中)
■73830 / )  ホットキーの長押しを取得したい
□投稿者/ pod (23回)-(2014/11/07(Fri) 18:15:37)

分類:[C#] 

C# 2013 で特定のキーの押下状態を取得し、押したタイミングと離したタイミングでそれぞれ別の処理をしようと思います。
具体的にはホットキーが押されている間だけフォームを表示し、離したら非表示にするというものです。

タイマーを使って現在のキーの状態を取得しようと思い、次のようにしました。

int mod = 0x0002 | 0x0004; // Control + Shift
Keys key = Keys.A;

[DllImport("user32")]
static extern short GetAsyncKeyState(Keys vKey);

void Timer_Tick(object sender, EventArgs e)
{

if (GetAsyncKeyState(key) < 0 && (Control.ModifierKeys & mod) == mod){
// 押されている
} else {
// 押されていない
}

}

一応キーの状態は判別できているのですが、指定していない余分なキーが押されていた場合であっても押されたことになってしまいます。
例えば「Control+Shift+A」にのみ反応させるつもりが、「Control+Alt+Shift+A」のように、指定したキーが全て含まれてさえいれば反応しているようです。

指定したキーのみが押されている状態をどのように取得すればいいのでしょうか?
よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -