我在c#中使用winapi發送組合鍵時出現了一個奇怪的問題。 我的目標是創建一個發送兩個密鑰的方法f.e. SHIFT + HOME:如何使用WinAPI在c#中發送組合鍵後創建虛擬鍵
private const int WM_KEYDOWN = 0x0100;
private const int WM_KEYUP = 0x0101;
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void SendKey(byte key1, byte key2)
{
//SHIFT down
keybd_event(key1, 0, WM_KEYDOWN, UIntPtr.Zero);
//press HOME
keybd_event(key2, 0, WM_KEYDOWN, UIntPtr.Zero);
keybd_event(key2, 0, WM_KEYUP, UIntPtr.Zero);
//SHIFT up
keybd_event(key1, 0, WM_KEYUP, UIntPtr.Zero);
}
問題是在方法結束執行後仍然按下key1(SHIFT)。換句話說,附加的方法調用將從上次運行中按下SHIFT開始。 它看起來非常簡單,但我找不到解決方案使其工作。我查看了許多相關的SO問題並嘗試了它們,但問題仍然存在。任何幫助表示讚賞。
錯誤的標誌。 WM_KEYDOWN = 0,WM_KEYUP = KEYEVENTF_KEYUP。贊成SendInput()代替,你可以拋出一個異常,當它返回0. –