Aracılığıyla paylaş


Ham Girişe Genel Bakış

Geleneksel klavye ve farenin yanında birçok kullanıcı girişi cihazı vardır. Örneğin, kullanıcı girişi bir oyun çubuğundan, dokunmatik ekrandan, mikrofondan veya kullanıcı girişinde büyük esneklik sağlayan diğer cihazlardan gelebilir. Bu cihazlar topluca İnsan Arabirim Cihazları (HID) olarak bilinir. Ham giriş API'si, uygulamaların klavye ve fare de dahil olmak üzere herhangi bir HID'den ham girişi kabul edebilmesi için kararlı ve sağlam bir yol sağlar.

Bu bölümde aşağıdaki konular ele alınır:

Ham Giriş Modeli

Daha önce, klavye ve fare genellikle giriş verilerini üretmişti. Sistem, bu cihazlardan gelen verileri ham bilgilerin cihaza özgü ayrıntılarını ortadan kaldırabilecek şekilde yorumladı. Örneğin, klavye cihaza özgü tarama kodunu oluşturur, ancak sistem sanal anahtar kodunu içeren bir uygulama sağlar. Pencere yöneticisi ham girişin ayrıntılarını gizlemenin yanı sıra tüm yeni HID'leri desteklemedi. Desteklenmeyen HID'lerden giriş almak için bir uygulamanın birçok şey yapması gerekiyordu: cihazı açma, paylaşılan modu yönetme, cihazı düzenli aralıklarla okuma veya G/Ç tamamlama bağlantı noktasını ayarlama vb. Ham giriş modeli ve ilişkili API'ler, klavye ve fare de dahil olmak üzere tüm giriş cihazlarından ham girişe basit erişim sağlamak için geliştirilmiştir.

Ham giriş modeli, klavye ve fare için özgün Windows giriş modelinden farklıdır. Özgün giriş modelinde, bir uygulama WM_CHAR, WM_MOUSEMOVEve WM_APPCOMMANDgibi kendi pencerelerine gönderilen veya gönderilen iletiler biçiminde cihazdan bağımsız giriş alır. Buna karşılık, ham giriş için bir uygulamanın veri almak istediği cihazları kaydetmesi gerekir. Ayrıca, uygulama WM_INPUT iletisi aracılığıyla ham girişi alır.

Ham giriş modelinin çeşitli avantajları vardır:

  • Bir uygulamanın giriş cihazını algılaması veya açması gerekmez.
  • Bir uygulama verileri doğrudan cihazdan alır ve gereksinimlerine göre işler.
  • Bir uygulama, aynı cihaz türünde olsa bile girişin kaynağını ayırt edebilir. Örneğin, iki fare cihazı.
  • Bir uygulama, bir cihaz koleksiyonundan veya yalnızca belirli cihaz türlerinden verileri belirterek veri trafiğini yönetir.
  • HID cihazları, yeni ileti türlerinin veya güncelleştirilmiş işletim sisteminin WM_APPCOMMANDiçinde yeni komutlara sahip olmasını beklemeden markette kullanılabilir hale geldikçe kullanılabilir.

WM_APPCOMMAND bazı HID cihazlarını desteklediğini unutmayın. Ancak WM_APPCOMMAND daha yüksek düzeyde cihazdan bağımsız bir giriş olayıdır ve WM_INPUT cihaza özgü ham ve düşük düzeyli veriler gönderir.

Ham Giriş için Kayıt

Varsayılan olarak, hiçbir uygulama ham giriş almaz. Bir cihazdan ham giriş almak için bir uygulamanın cihazı kaydetmesi gerekir.

Cihazları kaydetmek için bir uygulama, öncelikle istediği cihazlar için üst düzey koleksiyon (TLC) belirten RAWINPUTDEVICE yapılarının bir dizisini oluşturur. TLC, Kullanım Sayfası (cihazın sınıfı) ve Kullanım Kimliği (sınıfındaki cihaz) tarafından tanımlanır. Örneğin, TLC klavyesini almak için UsagePage = 0x01 ve UsageID = 0x06 değerini ayarlayın. Uygulama, cihazları kaydetmek için RegisterRawInputDevices çağırır.

Bir uygulamanın şu anda sisteme bağlı olmayan bir cihazı kaydedebileceğini unutmayın. Bu cihaz eklendiğinde, Windows Yöneticisi ham girişi uygulamaya otomatik olarak gönderir. Sistemdeki ham giriş cihazlarının listesini almak için, bir uygulama getRawInputDeviceListçağırır. Bir uygulama, bu çağrıdaki hDevice kullanarak cihaz bilgilerini almak için GetRawInputDeviceInfoçağırır.

RAWINPUTDEVICEyapısındaki üyesi olan dwFlags aracılığıyla, bir uygulama dinleyeceği ve yoksaymak istediği cihazları seçebilir. Örneğin, bir uygulama, yanıtlama makineleri dışında tüm telefon cihazlarından giriş isteyebilir. Örnek kod için bkz. Ham Giriş için Kaydolma.

Farenin ve klavyenin de HID'ler olduğunu ve bu nedenle verilerinin hem HID mesajı WM_INPUT hem de geleneksel mesajlar aracılığıyla gelebileceğini lütfen unutmayın. Bir uygulama, RAWINPUTDEVICEiçindeki bayrakların doğru seçimiyle iki yöntemden birini seçebilir.

Bir uygulamanın kayıt durumunu almak için istediğiniz zaman GetRegisteredRawInputDevicesçağırın.

Ham Girişi Okuma

Uygulama, kayıtta bulunan bir TLC ile eşleşen üst düzey koleksiyon (TLC) olan herhangi bir HID'den ham giriş alır. Bir uygulama ham giriş aldığında, ileti kuyruğu bir WM_INPUT iletisi alır ve kuyruk durumu bayrağı QS_RAWINPUT ayarlanır (QS_INPUT bu bayrağı da içerir). Uygulama, ön planda ve arka planda olduğunda veri alabilir.

Ham verileri okumanın iki yolu vardır: arabelleğe alınmamış (veya standart) yöntem ve arabelleğe alınmış yöntem. Dolaysız yöntem, ham verileri bir kerede RAWINPUT yapısı olarak alır ve birçok HID için yeterlidir. Burada uygulama, WM_INPUT iletisini almak için GetMessageçağırır. Ardından uygulama, WM_INPUTiçindeki RAWINPUT tanıtıcısını kullanarak GetRawInputData çağırır. Örnek için bkz. Ham Girişin Standart Okumasını Yapma.

Buna karşılık, arabelleğe alınan yöntem bir kerede RAWINPUT yapılar dizisini alır. Bu, büyük miktarda ham giriş üretebilen cihazlar için sağlanır. Bu yöntemde uygulama, RAWINPUT yapılarından oluşan bir dizi almak için GetRawInputBufferçağırır. NEXTRAWINPUTBLOCK makrosunun RAWINPUT yapıları dizisini geçirmek için kullanıldığını unutmayın. Örnek için bkz. Ham Veriyi Arabelleğe Alarak Okuma.

Ham girişi yorumlamak için HID'ler hakkında ayrıntılı bilgi gereklidir. Uygulama, cihaz tanıtıcısıyla GetRawInputDeviceInfo çağırarak cihaz bilgilerini alır. Bu tanıtıcı WM_INPUT veya RAWINPUTHEADERhDevice üyesinden gelebilir.

Ayrıca bkz.