Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det finns många användarindataenheter bredvid det traditionella tangentbordet och musen. Till exempel kan användarindata komma från en joystick, en pekskärm, en mikrofon eller andra enheter som ger stor flexibilitet vid användarinmatning. Dessa enheter kallas tillsammans för HUMAN Interface Devices (HIDs). API:et för råindata är ett stabilt och robust sätt för program att ta emot råa indata från valfri HID, inklusive tangentbord och mus.
Det här avsnittet täcker följande ämnen:
Raw-indatamodell
Tidigare genererade tangentbordet och musen vanligtvis indata. Systemet tolkade data som kom från dessa enheter på ett sätt som eliminerade de enhetsspecifika detaljerna i råinformationen. Tangentbordet genererar till exempel den enhetsspecifika genomsökningskoden, men systemet tillhandahåller ett program med den virtuella nyckelkoden. Förutom att dölja information om råa indata, har fönsterhanteraren inte stöd för alla nya HID: er. För att få indata från HID:erna som inte stöds var ett program tvunget att göra många saker: öppna enheten, hantera det delade läget, regelbundet läsa enheten eller konfigurera I/O-slutförandeporten och så vidare. Den råa indatamodellen och tillhörande API:er utvecklades för att ge enkel åtkomst till råa indata från alla indataenheter, inklusive tangentbord och mus.
Den råa indatamodellen skiljer sig från den ursprungliga Windows-indatamodellen för tangentbordet och musen. I den ursprungliga indatamodellen tar ett program emot enhetsoberoende indata i form av meddelanden som skickas eller skickas till dess fönster, till exempel WM_CHAR, WM_MOUSEMOVEoch WM_APPCOMMAND. För råa indata måste ett program däremot registrera de enheter som det vill hämta data från. Dessutom tar programmet emot rådata via meddelandet WM_INPUT.
Det finns flera fördelar med den råa indatamodellen:
- Ett program behöver inte identifiera eller öppna indataenheten.
- Ett program hämtar data direkt från enheten och bearbetar data för sina behov.
- Ett program kan skilja källan till indata även om det är från samma typ av enhet. Till exempel två musenheter.
- Ett program hanterar datatrafiken genom att ange data från en samling enheter eller endast specifika enhetstyper.
- HID-enheter kan användas när de blir tillgängliga på marketplace, utan att vänta på att nya meddelandetyper eller ett uppdaterat operativsystem ska ha nya kommandon i WM_APPCOMMAND.
Observera att WM_APPCOMMAND tillhandahåller vissa HID-enheter. Men WM_APPCOMMAND är en enhetsoberoende indatahändelse på högre nivå, medan WM_INPUT skickar rådata på låg nivå som är specifika för en enhet.
Registrering för råa indata
Som standard tar inget program emot råa indata. Om du vill ta emot råa indata från en enhet måste ett program registrera enheten.
För att registrera enheter skapar ett program först en matris med RAWINPUTDEVICE strukturer som anger toppnivåsamling (TLC) för de enheter som det vill ha. TLC definieras av en användningssida (enhetens klass) och ett användnings-ID (enheten i klassen). Om du till exempel vill hämta tangentbordets TLC anger du UsagePage = 0x01 och UsageID = 0x06. Programmet anropar RegisterRawInputDevices för att registrera enheterna.
Observera att ett program kan registrera en enhet som för närvarande inte är ansluten till systemet. När den här enheten är ansluten skickar Windows Manager automatiskt råa indata till programmet. För att hämta listan över råa indataenheter i systemet anropar ett program GetRawInputDeviceList. Med hjälp av hDevice- från det här anropet anropar ett program GetRawInputDeviceInfo för att hämta enhetsinformationen.
Genom dwFlags medlemmen i RAWINPUTDEVICEkan ett program välja vilka enheter som ska avlyssnas och även vilka det vill ignorera. Ett program kan till exempel be om indata från alla telefonienheter förutom telefonsvarare. Exempelkod finns i Registrering för raw-indata.
Observera att musen och tangentbordet också är HID:er, så att data från dem kan komma genom både HID-meddelandet WM_INPUT och från traditionella meddelanden. Ett program kan välja antingen metod genom korrekt val av flaggor i RAWINPUTDEVICE.
Om du vill hämta en applikations registreringsstatus kan du när som helst anropa GetRegisteredRawInputDevices.
Läsa råa indata
Ett program tar emot råa indata från alla HID vars toppnivåsamling (TLC) matchar ett TLC från registreringen. När ett program tar emot råa indata får meddelandekön ett WM_INPUT-meddelande och kö-statusflaggan QS_RAWINPUT anges (QS_INPUT innehåller även den här flaggan). Ett program kan ta emot data när det är i förgrunden och när det finns i bakgrunden.
Det finns två sätt att läsa rådata: den obuffertade (eller standard) metoden och den buffrade metoden. Den obufferterade metoden hämtar rådata en RAWINPUT- struktur i taget och är lämplig för många HID. Här anropar programmet GetMessage för att hämta meddelandet WM_INPUT. Sedan anropar programmet GetRawInputData med hjälp av RAWINPUT--referensen som finns i WM_INPUT. Ett exempel finns i Doing a Standard Read of Raw Input.
Den buffrade metoden hämtar däremot en matris med RAWINPUT- strukturer i taget. Detta tillhandahålls för enheter som kan producera stora mängder råa indata. I den här metoden anropar programmet GetRawInputBuffer för att hämta en matris med RAWINPUT- strukturer. Observera att makrot NEXTRAWINPUTBLOCK används för att bläddra igenom en matris med RAWINPUT- strukturer. Ett exempel finns i Att göra en buffrad läsning av raw-indata.
För att tolka rådataindata krävs detaljerad information om HID:erna. Ett program hämtar enhetsinformationen genom att anropa GetRawInputDeviceInfo med enhetshandtaget. Det här handtaget kan antingen komma från WM_INPUT eller från hDevice medlem av RAWINPUTHEADER.