SendInput 函式 (winuser.h)
合成按鍵、滑鼠動作和按鈕點選。
語法
UINT SendInput(
[in] UINT cInputs,
[in] LPINPUT pInputs,
[in] int cbSize
);
參數
[in] cInputs
類型: UINT
pInputs 陣列中的結構數目。
[in] pInputs
類型: LPINPUT
INPUT 結構的陣列。 每個結構都代表要插入鍵盤或滑鼠輸入數據流中的事件。
[in] cbSize
類型: int
INPUT 結構的大小,以位元組為單位。 如果 cbSize 不是 INPUT 結構的大小,則函式會失敗。
傳回值
類型: UINT
函式會傳回成功插入鍵盤或滑鼠輸入數據流的事件數目。 如果函式傳回零,則輸入已經由另一個線程封鎖。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
當 UIPI 封鎖此函式時,此函式會失敗。 請注意, GetLastError 和傳回值都不會指出失敗是因為 UIPI 封鎖所造成。
備註
此函式受限於UIPI。 應用程式只能將輸入插入相同或較低完整性層級的應用程式。
SendInput 函式會將事件串行地插入輸入結構中的鍵盤或滑鼠輸入數據流。 這些事件不會與使用者插入的其他鍵盤或滑鼠輸入事件交錯,或是 (透過鍵盤或滑鼠) 或呼叫來插入其他鍵盤或滑鼠輸入事件,或是呼叫 keybd_event、 mouse_event或其他 SendInput 呼叫。
此函式不會重設鍵盤的目前狀態。 呼叫函式時已經按下的任何索引鍵,可能會干擾此函式所產生的事件。 若要避免這個問題,請使用 GetAsyncKeyState 函式檢查鍵盤的狀態,並視需要更正。
由於觸控式鍵盤使用 winnls.h 中定義的 Surrogate 宏將輸入傳送至系統,因此鍵盤事件勾點上的接聽程式必須譯碼源自觸控式鍵盤的輸入。 如需詳細資訊,請參閱 Surrogates 和增補字元。
輔助功能應用程式可以使用 SendInput 來插入對應至殼層所處理之應用程式啟動快捷鍵的按鍵。 此功能不保證適用於其他類型的應用程式。
範例
//**********************************************************************
//
// Sends Win + D to toggle to the desktop
//
//**********************************************************************
void ShowDesktop()
{
OutputString(L"Sending 'Win-D'\r\n");
INPUT inputs[4] = {};
ZeroMemory(inputs, sizeof(inputs));
inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = VK_LWIN;
inputs[1].type = INPUT_KEYBOARD;
inputs[1].ki.wVk = 'D';
inputs[2].type = INPUT_KEYBOARD;
inputs[2].ki.wVk = 'D';
inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;
inputs[3].type = INPUT_KEYBOARD;
inputs[3].ki.wVk = VK_LWIN;
inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;
UINT uSent = SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT));
if (uSent != ARRAYSIZE(inputs))
{
OutputString(L"SendInput failed: 0x%x\n", HRESULT_FROM_WIN32(GetLastError()));
}
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包括 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
另請參閱
概念
參考