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 構造体のサイズ (バイト単位)。 cbSizeINPUT 構造体のサイズでない場合、関数は失敗します。

戻り値

型: UINT

関数は、キーボードまたはマウス入力ストリームに正常に挿入されたイベントの数を返します。 関数が 0 を返す場合、入力は既に別のスレッドによってブロックされています。 詳細なエラー情報を得るには、GetLastError を呼び出します。

この関数は、UIPI によってブロックされると失敗します。 GetLastError も戻り値も、エラーが UIPI ブロックによって引き起こされたことを示しません。

注釈

この関数は UIPI の対象となります。 アプリケーションは、等しいかそれ以下の整合性レベルのアプリケーションにのみ入力を挿入できます。

SendInput 関数は、INPUT 構造体のイベントをキーボードまたはマウス入力ストリームに順次挿入します。 これらのイベントは、ユーザー (キーボードまたはマウスを使用) または SendInput へのkeybd_eventmouse_event、またはその他の呼び出しの呼び出しによって挿入された他のキーボードまたはマウス入力イベントに分散されません。

この関数は、キーボードの現在の状態をリセットしません。 関数が呼び出されたときに既に押されているキーは、この関数によって生成されるイベントに干渉する可能性があります。 この問題を回避するには、GetAsyncKeyState 関数を使用してキーボードの状態をチェックし、必要に応じて修正します。

タッチ キーボードは winnls.h で定義されているサロゲート マクロを使用してシステムに入力を送信するため、キーボード イベント フックのリスナーはタッチ キーボードからの入力をデコードする必要があります。 詳細については、「 サロゲートと補助文字」を参照してください。

アクセシビリティ アプリケーションでは、 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 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll

関連項目

概念

GetAsyncKeyState

INPUT

キーボード入力

リファレンス

サロゲート文字と補助文字

keybd_event

mouse_event