Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找用户是否按键?_C#_Winapi - Fatal编程技术网

C# 查找用户是否按键?

C# 查找用户是否按键?,c#,winapi,C#,Winapi,我想查看用户是否按下了键盘键。 我尝试了一些代码: [DllImport("User32.dll")] private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey); [DllImport("User32.dll")] private static extern short GetAsyncKeyState(System.Int32 vKey); .....

我想查看用户是否按下了键盘键。 我尝试了一些代码:

    [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。
我怎样才能用一种简单的方法到达那里?

你能检查一下吗

//in pseudocode
if (f10pressed) {
    if (shiftpressed) {
        //Shift+F10
    } else if (ctrlpressed) {
        //Ctrl+F10
    } else {
        //F10
    }
}

没有简单的方法;GetAsyncKeyState()将返回您指定的确切键的值,忽略修改器键的概念。Handling处理您想要的一些修改器,但对于所有这些修改器(shift、alt、ctrl),您必须显式地检查其他键。

您需要为您感兴趣的每个键检查
GetAsyncKeyState
。在这种情况下,您将检查F10,然后检查shift、ctrl、alt和其他。有关可能的值,请参阅,然后参阅

看看c#shift有很多可能的值,您可能需要进行一些实验

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.
}