다음을 통해 공유


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_event, mouse_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 포함)
라이브러리 User32.lib
DLL User32.dll

추가 정보

개념

GetAsyncKeyState

INPUT

키보드 입력

참조

서로게이트 및 보조 문자

keybd_event

mouse_event