Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A hagyományos billentyűzet és egér mellett számos felhasználói beviteli eszköz található. A felhasználói bemenetek például joystickból, érintőképernyőből, mikrofonból vagy más eszközökből származhatnak, amelyek nagy rugalmasságot biztosítanak a felhasználói bevitelben. Ezek az eszközök együttesen human interface devices (HID-k) néven ismertek. A nyers bemeneti API stabil és robusztus módot biztosít az alkalmazások számára, hogy bármilyen HID-ból fogadjanak nyers bemenetet, beleértve a billentyűzetet és az egeret is.
Ez a szakasz a következő témaköröket ismerteti:
Nyers bemeneti modell
Korábban a billentyűzet és az egér általában bemeneti adatokat generált. A rendszer úgy értelmezte az ezekről az eszközökről érkező adatokat, hogy a nyers információk eszközspecifikus részletei megszűntek. A billentyűzet például létrehozza az eszközspecifikus vizsgálati kódot, de a rendszer egy alkalmazást biztosít a virtuális kulcs kódjával. A nyers bemenet részleteinek elrejtése mellett az ablakkezelő nem támogatta az összes új HID-t. A nem támogatott HID-k bemenetének lekéréséhez az alkalmazásnak sok mindent kellett tennie: meg kellett nyitnia az eszközt, kezelnie kellett a megosztott módot, rendszeresen be kellett olvasnia az eszközt, vagy be kellett állítania az I/O-befejezési portot stb. A nyers bemeneti modellt és a hozzá tartozó API-kat úgy fejlesztették ki, hogy egyszerű hozzáférést tegyenek lehetővé a nyers bemenethez minden bemeneti eszközről, beleértve a billentyűzetet és az egeret is.
A nyers bemeneti modell eltér a billentyűzet és az egér eredeti Windows bemeneti modelljétől. Az eredeti bemeneti modellben az alkalmazások eszközfüggetlen bemenetet kapnak az ablakokba küldött vagy közzétett üzenetek formájában, például WM_CHAR, WM_MOUSEMOVEés WM_APPCOMMAND. Ezzel szemben a nyers bemenethez egy alkalmazásnak regisztrálnia kell azokat az eszközöket, ahonnan adatokat szeretne lekérni. Emellett az alkalmazás a nyers bemenetet a WM_INPUT üzeneten keresztül kapja meg.
A nyers bemeneti modellnek számos előnye van:
- Egy alkalmazásnak nem kell észlelnie vagy megnyitnia a bemeneti eszközt.
- Egy alkalmazás közvetlenül az eszközről szerzi be az adatokat, és az adatokat az igényeinek megfelelően dolgozza fel.
- Az alkalmazások akkor is meg tudják különböztetni a bemenet forrását, ha ugyanabból az eszköztípusból származnak. Például két egéreszköz.
- Az alkalmazások úgy kezelik az adatforgalmat, hogy egy eszközgyűjteményből vagy csak bizonyos eszköztípusokból származó adatokat ad meg.
- A HID-eszközök amint elérhetővé válnak a piacon, használhatók, anélkül, hogy új üzenettípusokra vagy frissített operációs rendszerre kellene várniuk, hogy új parancsok elérhetők legyenek WM_APPCOMMAND.
Vegye figyelembe, hogy WM_APPCOMMAND bizonyos HID-eszközöket biztosít. A WM_APPCOMMAND azonban egy magasabb szintű eszközfüggetlen bemeneti esemény, míg WM_INPUT az eszközre jellemző nyers, alacsony szintű adatokat küld.
Regisztráció nyers bemenethez
Alapértelmezés szerint egyetlen alkalmazás sem kap nyers bemenetet. Ha nyers bemenetet szeretne fogadni egy eszközről, az alkalmazásnak regisztrálnia kell az eszközt.
Az eszközök regisztrálásához az alkalmazás először létrehoz egy RAWINPUTDEVICE struktúrát, amely meghatározza a kívánt eszközök legfelső szintű gyűjteményt (TLC). A TLC-t egy használati lap (az eszköz osztálya) és egy használati azonosító (az osztályon belüli eszköz) határozza meg. A billentyűzet TLC-jének lekéréséhez például állítsa be a UsagePage = 0x01 és a UsageID = 0x06 értéket. Az alkalmazás meghívja RegisterRawInputDevices az eszközök regisztrálásához.
Vegye figyelembe, hogy egy alkalmazás regisztrálhat egy olyan eszközt, amely jelenleg nincs csatlakoztatva a rendszerhez. Ha az eszköz csatlakoztatva van, a Windows Manager automatikusan elküldi a nyers bemenetet az alkalmazásnak. A rendszer nyers bemeneti eszközeinek listájának lekéréséhez egy alkalmazás meghívja GetRawInputDeviceList. A hDevice használatával egy alkalmazás meghívja GetRawInputDeviceInfo az eszköz adatainak lekéréséhez.
Az alkalmazás a RAWINPUTDEVICEdwFlags tagja révén kiválaszthatja azokat az eszközöket, amelyeket meg szeretne hallgatni, valamint azokat is, amelyeket figyelmen kívül szeretne hagyni. Egy alkalmazás például az üzenetrögzítő gépek kivételével minden telefonos eszközről kérhet bemenetet. A mintakódért lásd: Nyers adatbevitelhez való regisztráció.
Vegye figyelembe, hogy az egér és a billentyűzet is HID-k, így a tőlük származó adatok átjuthatnak a HID üzeneten WM_INPUT és a hagyományos üzenetekből is. Az alkalmazások a RAWINPUTDEVICEjelölőinek megfelelő kiválasztásával bármelyik módszert kiválaszthatják.
Az alkalmazás regisztrációs állapotának lekéréséhez bármikor meghívhatja a(z) GetRegisteredRawInputDevices függvényt.
Nyers bemenet olvasása
Az alkalmazás nyers bemenetet kap minden olyan HID-ból, amelynek legfelső szintű gyűjteményének (TLC) megfelel a regisztrációban szereplő TLC-nek. Amikor egy alkalmazás nyers bemenetet kap, az üzenetsor egy WM_INPUT üzenetet kap, és be van állítva az üzenetsor állapotjelzője QS_RAWINPUT (QS_INPUT is tartalmazza ezt a jelzőt). Az alkalmazások akkor fogadhatnak adatokat, ha az előtérben van, és ha a háttérben van (ha regisztrálva van RIDEV_INPUTSINK).
A nyers adatok olvasásának két módja van: a standard és a pufferelt metódus.
A standard metódus egyszerre egyetlen RAWINPUT-struktúrát olvas be, és a legtöbb eszköz számára megfelelő. Az alkalmazás meghívja a GetMessage-et az WM_INPUT üzenet lekéréséhez, majd meghívja a GetRawInputData parancsot az lParamban átadott HRAWINPUT leíróval. Például lásd a nyers bemenet standard olvasásának végrehajtása részt.
A pufferelt metódus egyszerre több RAWINPUT-struktúrát olvas be, és nagy frekvenciájú eszközök, például 1000Hz-es egerek esetén hasznos, ahol több esemény halmozódhat fel az üzenethurok-iterációk között. Az alkalmazás meghívja a GetRawInputBuffert , hogy ürítse ki az összes halmozott eseményt egyetlen kötegben. A NEXTRAWINPUTBLOCK makróval lépkedhet az eredményként kapott tömbön.
Fontos
A GetMessage eltávolítja az aktuális WM_INPUT-t a nyers bemeneti üzenetsorból, mielőtt visszatér. Ennek eredményeképpen a GetRawInputBuffer nem fogja látni az aktuális eseményt – csak az azt követő eseményeket. Mindkét módszer kombinálásakor a helyes minta a következő:
- Hívja meg a GetRawInputData-t az lParam leíróval az aktuális esemény olvasásához.
- Hívja meg a GetRawInputBuffert egy hurokban az üzenetsorban felhalmozott további események kiürítéséhez.
A példát lásd: Nyers bemenet kötegelt olvasásának végrehajtása.
A nyers bemenet értelmezéséhez részletes információkra lehet szükség a HID-kkel kapcsolatban. Az alkalmazás az eszköz adatait a GetRawInputDeviceInfo hívásával kéri le az eszközkezelővel. Ez a fogópont a WM_INPUTlParam eleméből származhat a GetRawInputDataés RID_HEADER segítségével, vagy a RAWINPUTHEADERhDevice tagjától.