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() 将返回您指定的确切键的值,忽略修饰键的概念。处理WM_CHAR可以处理您想要的一些修饰符,但对于所有这些修饰符(shift、alt、ctrl),您必须明确检查其他键。

于 2013-01-11T05:57:55.403 回答
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# keys 枚举,有许多可能的 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 回答