|
分類:[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」のように、指定したキーが全て含まれてさえいれば反応しているようです。
指定したキーのみが押されている状態をどのように取得すればいいのでしょうか? よろしくお願いします。
|