Share via


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_eventmouse_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

另請參閱

概念

GetAsyncKeyState

INPUT

鍵盤輸入

參考

代理和補充字元

keybd_event

mouse_event