이벤트
11월 19일 오후 11시 - 11월 21일 오후 11시
Microsoft Ignite 온라인에 참석하여 강력한 AI 및 클라우드 솔루션으로 필요한 경쟁 우위를 확보하세요.
지금 등록기존 키보드와 마우스 외에도 많은 사용자 입력 디바이스가 있습니다. 예를 들어 사용자 입력은 조이스틱, 터치 스크린, 마이크 또는 사용자 입력의 유연성이 뛰어난 기타 장치를 통해 이루어질 수 있습니다. 이러한 디바이스를 HID(휴먼 인터페이스 디바이스)라고 합니다. 원시 입력 API는 애플리케이션이 키보드와 마우스를 포함한 모든 HID의 원시 입력을 수락할 수 있는 안정적이고 강력한 방법을 제공합니다.
이 섹션에서는 다음 항목을 다룹니다.
이전에는 일반적으로 키보드와 마우스를 사용해 데이터를 입력했습니다. 시스템은 이러한 디바이스에서 들어오는 데이터를 원시 정보의 디바이스별 세부 정보를 제거하는 방식으로 해석했습니다. 예를 들어 키보드는 디바이스별 스캔 코드를 생성하지만 시스템은 애플리케이션에 가상 키 코드를 제공합니다. 원시 입력의 세부 정보를 숨기는 것 외에도 창 관리자는 모든 새 HID를 지원하지 않았습니다. 지원되지 않는 HID에서 입력을 얻으려면 애플리케이션에서 디바이스를 열고, 공유 모드를 관리하거나, 디바이스를 주기적으로 읽거나, I/O 완료 포트를 설정하는 등 많은 작업을 수행해야 했습니다. 원시 입력 모델 및 관련 API는 키보드와 마우스를 포함한 모든 입력 디바이스에서 원시 입력에 간단하게 액세스할 수 있도록 개발되었습니다.
원시 입력 모델은 키보드와 마우스를 위한 원래 Windows 입력 모델과 다릅니다. 원래 입력 모델에서 애플리케이션은 WM_CHAR, WM_MOUSEMOVE 및 WM_APPCOMMAND 같은 창에 전송되거나 게시되는 메시지 형식으로 디바이스 독립적 입력을 수신합니다. 반면 원시 입력의 경우 애플리케이션은 데이터를 가져올 디바이스를 등록해야 합니다. 또한 애플리케이션은 WM_INPUT 메시지를 통해 원시 입력을 가져옵니다.
원시 입력 모델에는 다음과 같은 여러 가지 이점이 있습니다.
WM_APPCOMMAND가 일부 HID 디바이스에 대해 제공합니다. 그러나 WM_APPCOMMAND는 더 높은 수준의 디바이스 독립적 입력 이벤트이지만 WM_INPUT은 디바이스와 관련된 원시 하위 수준 데이터를 보냅니다.
기본적으로 원시 입력을 수신하는 애플리케이션은 없습니다. 디바이스에서 원시 입력을 수신하려면 애플리케이션이 디바이스를 등록해야 합니다.
디바이스를 등록하기 위해 애플리케이션은 먼저 원하는 디바이스에 대한 최상위 컬렉션(TLC)을 지정하는 RAWINPUTDEVICE 구조체의 배열을 만듭니다. TLC는 사용 페이지(디바이스의 클래스) 및 사용 ID(클래스 내의 디바이스)로 정의됩니다. 예를 들어 키보드 TLC를 얻으려면 UsagePage = 0x01 및 UsageID = 0x06을 설정합니다. 애플리케이션은 RegisterRawInputDevices를 호출하여 디바이스를 등록합니다.
애플리케이션은 현재 시스템에 연결되지 않은 디바이스를 등록할 수 있습니다. 이 디바이스가 연결되면 Windows 관리자가 원시 입력을 애플리케이션에 자동으로 전송합니다. 시스템에서 원시 입력 디바이스의 목록을 가져오기 위해 애플리케이션은 GetRawInputDeviceList를 호출합니다. 애플리케이션은 이 호출의 hDevice를 사용하여 GetRawInputDeviceInfo를 호출하여 디바이스 정보를 가져옵니다.
RAWINPUTDEVICE의 dwFlags 멤버를 통해 애플리케이션은 수신 대기할 디바이스와 무시할 디바이스를 선택할 수 있습니다. 예를 들어 애플리케이션은 응답기를 제외한 모든 전화 통신 디바이스의 입력을 요청할 수 있습니다. 샘플 코드는 원시 입력 등록을 참조하세요.
마우스와 키보드도 HID이므로 이러한 디바이스가 보낸 데이터는 HID 메시지 WM_INPUT 및 기존 메시지를 통해 들어올 수 있습니다. 애플리케이션은 RAWINPUTDEVICE에서 적절한 플래그를 선택하여 두 방법 중 하나를 선택할 수 있습니다.
애플리케이션의 등록 상태를 가져오려면 언제든지 GetRegisteredRawInputDevices를 호출합니다.
애플리케이션은 TLC(최상위 컬렉션)가 등록의 TLC와 일치하는 모든 HID에서 원시 입력을 받습니다. 애플리케이션이 원시 입력을 받으면 해당 메시지 큐는 WM_INPUT 메시지를 가져오고 큐 상태 플래그 QS_RAWINPUT이 설정됩니다(QS_INPUT에 이 플래그도 포함됨). 애플리케이션은 포그라운드에 있을 때와 백그라운드에 있을 때 데이터를 수신할 수 있습니다.
원시 데이터를 읽는 방법에는 버퍼링되지 않은(또는 표준) 메서드와 버퍼링된 메서드의 두 가지가 있습니다. 버퍼링되지 않은 메서드는 원시 데이터를 한 번에 하나의 RAWINPUT 구조체로 가져오며 많은 HID에 적합합니다. 여기서 애플리케이션은 GetMessage를 호출하여 WM_INPUT 메시지를 가져옵니다. 그런 다음 애플리케이션은 WM_INPUT에 포함된 RAWINPUT 핸들을 사용하여 GetRawInputData를 호출합니다. 예를 들어 원시 입력의 표준 읽기 작업을 참조하세요.
반면 버퍼링된 메서드는 한 번에 RAWINPUT 구조체의 배열을 가져옵니다. 대량의 원시 입력을 생성할 수 있는 디바이스에 대해 제공됩니다. 이 메서드에서 애플리케이션은 GetRawInputBuffer를 호출하여 RAWINPUT 구조체의 배열을 가져옵니다. NEXTRAWINPUTBLOCK 매크로는 RAWINPUT 구조체의 배열을 트래버스하기 위해 사용됩니다. 예제는 원시 입력의 버퍼링된 읽기 수행을 참조하세요.
원시 입력을 해석하려면 HID에 대한 자세한 정보가 필요합니다. 애플리케이션은 디바이스 핸들을 사용하여 GetRawInputDeviceInfo를 호출하여 디바이스 정보를 가져옵니다. 이 핸들은 WM_INPUT 또는 RAWINPUTHEADER의 hDevice 멤버에서 올 수 있습니다.
이벤트
11월 19일 오후 11시 - 11월 21일 오후 11시
Microsoft Ignite 온라인에 참석하여 강력한 AI 및 클라우드 솔루션으로 필요한 경쟁 우위를 확보하세요.
지금 등록학습
모듈
게임 하드웨어에 대한 접근성 모범 사례 - Training
게임 콘솔, 컨트롤러, 헤드셋 등, 접근이 보다 용이한 표준 게임 하드웨어 제품을 만드는 방법을 알아봅니다. 더 많은 고객의 언박싱 경험을 개선하기 위해 액세스 가능한 구성 요소를 제공하는 하드웨어 패키지를 디자인하는 방법을 찾아봅니다.