1

ユーザーがキーボードのキーを押したかどうかを調べたい。私はいくつかのコードを試しました:

    [DllImport("User32.dll")]
    private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
    [DllImport("User32.dll")]
    private static extern short GetAsyncKeyState(System.Int32 vKey);
    .....
     if ((GetAsyncKeyState(Keys.F10) == -32767))
       {....}

それが何をするかというと、F10 キーが押されたかどうかをチェックするだけです。それが Shift+F10 か Ctrl+F10 か F10 かは関係ありません。しかし、私が望んでいたのは、Shift + F10の場合はユーザーがShift + F10を押したことを伝え、F10の場合はユーザーがF10を押したことを伝え、それらを個別に検索することです。どうすれば簡単な方法でそこに着くことができますか?

4

3 に答える 3

0

興味のある各キーをチェックする必要がありGetAsyncKeyStateます。この場合、F10をチェックしてから、shift、ctrl、altなどをチェックします。可能な値については仮想キーコードを参照し、 GetAsyncKeyStateを参照してください。

short key = GetAsyncKeyState(Keys.F10);
// Check the most significant bit to see if the key is down
if ( ( key & 0x8000 ) > 0 )
{
     // Check  shift is down 0x10 is value for VK_SHIFT
     key = GetAsyncKeyState( 0x10 );
     if ( key & 0x8000 ) > 0 )
     {
         // Shift key is down as well
     }
     // Repeat for other key states.
}

c#キーの列挙を見ると、 shiftに使用できる値がいくつかあるので、少し実験する必要があるかもしれません。

于 2013-01-11T11:27:33.557 に答える
0

以下のように確認できませんか?

//in pseudocode
if (f10pressed) {
    if (shiftpressed) {
        //Shift+F10
    } else if (ctrlpressed) {
        //Ctrl+F10
    } else {
        //F10
    }
}
于 2013-01-11T05:17:34.147 に答える
0

簡単な方法はありません。GetAsyncKeyState() は、修飾キーの概念を無視して、指定した正確なキーの値を返します。WM_CHARの処理は、必要ないくつかの修飾子を処理しますが、それらすべて (shift、alt、ctrl) については、他のキーを明示的にチェックする必要があります。

于 2013-01-11T05:57:55.403 に答える