我正在處理一些模擬按鍵的代碼。一切工作正常,我可以看到按鍵按預期(現在用Capslock/Numlock測試,所以我可以看到鍵盤上的LED)。但是,爲了我的需要,我需要能夠100%地分辨出是否按下了這些按鍵。我的應用程序很奇怪,所以我決定以較小的規模再現問題,並且發現了一件非常奇怪的事情。函數IsKeyLocked
不會返回我期望的結果。IsKeyLocked返回奇怪的結果
讓我們有這樣的代碼:
按壓鍵private void btnPressButton_Click(object sender, EventArgs e)
{
KeyboardManager.PressKey(KeyCode.CapsLock);
lblKeyboardState.Text = IsKeyLocked(Keys.CapsLock).ToString();
}
方法:
[DllImport("user32.dll", SetLastError = true)]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public static void PressKey(KeyCode keyCode)
{
byte code = (byte)keyCode;
keybd_event(code, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(code, 0, KEYEVENTF_KEYUP, 0);
}
有人會想到,這第一個按鈕點擊後,其結果將是TRUE(大寫鎖定WASN當我運行應用時沒有按下)。但即使我的鍵盤上的LED發光,它也是假的。當我再次按下按鈕時,結果爲True,但LED不再閃爍。爲什麼這個函數返回錯誤的結果?我錯過了什麼或...?
根據MSDN文檔:
確定Caps Lock,Num Lock或Scroll Lock鍵是 效果。
如果這是一個真實的陳述,這裏實際發生了什麼?如何從C#獲得100%可靠的答案,無論caplock/numlock是否有效?
這應該包含在msdn文檔中!非常感謝你。 – walther