2008-09-18 33 views
12

Birden çok klavyeye sahip olduğum ve gerçekten de tuş vuruşunun hangi klavyeden geldiğini bilmem gereken bir sistem var. setini açıklamak için:Çoklu klavye ve alt düzey kancalar

  1. normal bir PC ve USB klavye var
  2. Ben gönderme
  3. sert tuşlar standart bir USB klavye olarak eşlenir bazı sert tuşlarıyla harici VGA ekranı var anahtar kodlarının sınırlı sayıda (F1, F2, Dönüş, + ve -)

ben alt düzey kanca olduğunda bile girdi başa yapabiliyor (C# ama aslında çağrıda Win32 işlevselliği) benim uygulama odaklı değil. Sorun, normal klavyeyi kullanırken, uygulama tarafından algılanan eşlenmiş anahtar kodların bir kısmının dış ekranda sürülmekte olmasıdır. Harici ekran tarafından gönderilen ve onay için kullanılan anahtar preslerden biri VK_RETURN. "Cihaz" ı tanımlayıp filtrelemediğim sürece, kullanıcı eylemleri gerçekleştirebilir ve hatta bakmadıkları bir ekranda onaylayabilir.

Tuş basımından hangi klavyenin sorumlu olduğunu nasıl bilebilirim?

+0

Bu soruya şu soruları yanıtladım: [Fare ve touchpad'in her ikisi de etkinse giriş aygıtı nasıl algılanır] (http://stackoverflow.com/a/8804862/1000282). Cevap, oluşturduğum bir c kütüphanesi ve sürücüleri kullanıyor. –

+0

Soruma kesinlikle bir cevap değil. Doğru olarak işaretlenen cevap birkaç yıl boyunca iyi çalıştı. –

+0

@ ray-haves Filtreledikten sonra bile diğer uygulamalar için _making_ adresinden girişi engelleyebildiğinizi onaylayabilir misiniz? Bu, bir tuş vuruşu ham girişten filtre edildiğinde, işletim sisteminin geri kalanı tarafından işlenmesini engelleyebilir misiniz? –

cevap

14

Evet, her gün yeni bir şeyler öğrenmek için düzeltilmeye devam ediyorum.

  • sizinle :: RegisterRawInputDevices çiğ girdi (iki klavye)() için kullanmak istediğiniz cihazları kaydettirin:

    İşte :) bunu telafi benim denemesi. Eğer cihazlarınızı belirttikten sonra

  • Sen WM_INPUT mesajları almaya başlayacak, GetRawInputDeviceList gelen bu cihazları()

  • alabilirsiniz.

  • WM_INPUT mesajının LParam giriş gelen klavye, artı sanal anahtar kodu ve mesajın türünü belirlemek için kullanabileceğiniz bir RAWKEYBOARD yapısını (WM_KEYDOWN WM_KEYUP, ...)

  • içeriyor
  • Böylece, son iletinin nereden geldiğini işaretleyebilir ve ardından normal klavye giriş işleyicilerine gönderebilirsiniz.

+0

Birden fazla dokunma olayı almam gerektiğine benzer bir sorunum var. daha detaylı bir örneğiniz var mı? – user1865027

-3

Bunu yapmanın yolu yoktur. Windows bunu sizin için soyutlar. Belirtildiği gibi, bir aygıt sürücüsünü yazmanız/değiştirmeniz gerekir.

+0

Oh, bu utanç verici. Cihaz üreticilerine başlayacağım ve farklı anahtar kodları kullanmak için donanımın yanıp sönmesinin bir yolu olup olmadığına bakacağım (umarım yüksek VK_Fn sayılarında). –

+1

Bir Nony Mouse'un cevabına dayanan bir sürücü olmadan bunun mümkün olmadığı anlaşılıncaya kadar. –