VOID keybd_event(
BYTE bVk, // 虛擬鍵值。
BYTE bScan, // 硬體掃描碼。
DWORD dwFlags, // 動作標識。
DWORD dwExtraInfo // 與鍵盤動作關聯的輔加信息。
);
其中,bVk表示虛擬鍵值,其實它是一個BYTE類型值的宏,其取值範圍為1-254。有關虛擬鍵值表請看最下文檔說明。bScan表示當鍵盤上某鍵被按下和放開時,鍵盤系統硬體產生的掃描碼,我們可以使用MapVirtualKey()函式在虛擬鍵值與掃描碼之間進行轉換。dwFlags表示各種各樣的鍵盤動作,它有兩種取值:
KEYEVENTF_EXTENDEDKEY和KEYEVENTF_KEYUP。
下面我們使用一段代碼實現在遊戲中按Ctrl+R快捷鍵對攻擊對象進行攻擊。
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0); //按下CTRL鍵。
keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//鍵下R鍵。
keybd_event(0x52,MapVirtualKey(0x52,0), KEYEVENTF_KEYUP,0);//放開R鍵。
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),
KEYEVENTF_KEYUP,0);//放開CTRL鍵。
這裡是有問題的,會導致鍵不釋放:
API.keybd_event(0xA4,0, 0, 0); //按下ALT鍵。 Thread.Sleep(100); API.PostMessage(fatherhwnd, API.WM_KEYDOWN, (int)Keys.F, 0); Thread.Sleep(100); API.keybd_event(0xA4, 0, 2, 2);//放開ALT鍵。
虛擬鍵值表