使用 Windows API keybd_event 模擬鍵盤按鍵,實現:
#include <windows.h>
#include <stdio.h>
void main() {
// 模擬 Win + R
keybd_event(0x5B, 0, 0, 0); // 左 Win 鍵按下
keybd_event('R', 0, 0, 0); // R 鍵按下
keybd_event('R', 0, 2, 0); // R 鍵釋放
keybd_event(0x5B, 0, 2, 0); // 左 Win 鍵釋放
char str[] = "notepad";
int i = 0;
Sleep(1000); // 等待運行框彈出
// 逐字符輸入 notepad
while (str[i]) {
// 字母鍵需模擬 Shift + 字母(大寫)或直接發送虛擬鍵碼
// 這裡簡化處理:假設輸入小寫,實際需根據鍵盤佈局發送正確掃描碼
keybd_event(str[i] - 32, 0, 0, 0); // 按下(大寫碼)
keybd_event(str[i] - 32, 0, 2, 0); // 釋放
i++;
}
Sleep(1000);
// 模擬 Enter 執行
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, 2, 0);
keybd_event(VK_RETURN, 0, 0, 0); // 雙重發送確保觸發
keybd_event(VK_RETURN, 0, 2, 0);
}
| 參數 | 含義 |
|---|---|
bVk | 虛擬鍵碼(如 VK_RETURN, 'R', 0x5B 左 Win) |
bScan | 硬件掃描碼,通常設 0 由系統映射 |
dwFlags | 0=按下, 2=釋放, 1=擴展鍵 |
dwExtraInfo | 額外信息,通常 0 |
str[i] - 32 假設 ASCII 字母大小寫差 32,僅適用於美式鍵盤佈局。實際應使用 VkKeyScanEx 獲取正確虛擬鍵碼與 Shift 狀態SendInput API 功能更強、支持更多輸入類型,推薦新項目使用Sleep 時間需根據機器性能調整,過短導致輸入丟失INPUT inputs[2] = {};
inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = VK_LWIN;
inputs[1].type = INPUT_KEYBOARD;
inputs[1].ki.wVk = 'R';
inputs[1].ki.dwFlags = KEYEVENTF_KEYUP;
// ... 發送組合鍵、字符串、回車
SendInput(2, inputs, sizeof(INPUT));