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