我想查看用户是否按下键盘键。 我尝试了一些代码:
[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。 我怎样才能以简单的方式到达那里?
答案 0 :(得分:0)
//in pseudocode
if (f10pressed) {
if (shiftpressed) {
//Shift+F10
} else if (ctrlpressed) {
//Ctrl+F10
} else {
//F10
}
}
答案 1 :(得分:0)
没有一种简单的方法; GetAsyncKeyState()将返回您指定的确切键的值,忽略修饰键的概念。处理WM_CHAR会处理你想要的一些修饰符,但是对于所有这些修饰符(shift,alt,ctrl)你必须明确地检查其他键。
答案 2 :(得分:0)
您需要检查GetAsyncKeyState
您感兴趣的每个键。在这种情况下,您将检查F10,然后检查shift,ctrl,alt等。有关可能的值,请参阅virtual key codes,并参阅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 enumeration,有许多可能的移位值,您可能需要进行一些实验。