2016-04-06 37 views
0

Windows'ta fare ve klavyede ekstra girişleri algılamak için küçük bir kavram kanıtı yazıyorum, bu mümkün mü ve Windows API'daki çok sayıda düğmeden girişi algılamaya nasıl başlıyorum? Okuduğum kadarıyla, sadece 5 düğme için destek var ama birçok farenin bundan daha fazla düğmesi var, Windows API ile sorum bile mümkün, Windows kısıtlamaları dahilinde mümkün mü?Onbir fare düğmesine kadar desteklensin mi?

cevap

2

Raw Input API, WM_INPUT iletilerini doğrudan fare/klavye sürücüsünden almak için kullanabilirsiniz. 5 standart fare düğmesi için (sol, orta, sağ, x1 ve x2) yapı alanları vardır. Standart düğmelerin ötesinde, ek düğmeler, gerektiğinde kod yazmanız gereken satıcıya özgü veriler tarafından işlenir. API, ham değerlere erişmenizi sağlayabilir, ancak bunları nasıl yorumlayacağınız konusunda satıcı sürücü belgelerine başvurmanız gerekir. Bazen ekstra düğmeler aslında fare girişi yerine klavye girişi olarak bildirilir. Veya, Mouse Data ve Keyboard Data numaralarını almak için DirectInput API ile DirectInput devices ile etkileşimde bulunmayı deneyin. Veya, DirectInput'in ardılı olan XInput API'u da kullanabilirsiniz. Ancak XInput, DirectInput'tan daha sınırlıdır, çünkü DirectInput, Xbox 360 denetleyicisiyle etkileşimde bulunmak için tasarlanmıştır, oysa DirectInput, herhangi bir denetleyici ile etkileşime geçmek üzere tasarlanmıştır. Daha fazla ayrıntı için bkz. XInput and DirectInput.

+0

Gördüğünüz gibi, gerçekten bir çerez kesici cevabı yok. Her donanım üreticisinin özel sürücüsünü hesaba katmak zorundayım. – Stephen

+0

Ham Giriş API'sini kullanırsanız, evet. DirectInput biraz daha esnek ve geneldir ve 128 tuşa kadar işlem yapabilir (bir seferde 8 düğmeden daha fazlasını nasıl işlediğini bilmeme rağmen, bu maksimum ['DIMOUSESTATE2'] (https: // msdn) .microsoft.com/tr-us/library/windows/desktop/microsoft.directx_sdk.reference.dimousestate2.aspx) ['IDirectInputDevice8 :: GetDeviceState()'] (https://msdn.microsoft.com/ en-us/kütüphane/windows/masa/microsoft.directx_sdk.idirectinputdevice8.idirectinputdevice8.getdevicestate.aspx)). –

0

Çok basit: GetKeyState

SHORT WINAPI GetKeyState(
    _In_ int nVirtKey 
); 

Mantık kullanmak yanındadır:

  1. düğmelere basmak için değil kullanıcıyı sor Bırak düğmeleri devlet bastırdı
  2. tüm düğmeleri 0-255 için
  3. Döngü GetKeyState (bazı sanal tuşlar basılmadan bile basılabilir, nedenini bilmeden)
  4. Şimdi başlamak tuşları dinlenme tuşları kodları için iplik izlemek ve herhangi yapıya onları kurtarmak
  5. herhangi bir kullanıcı
  6. tarafından düğmelere bastı göreceksiniz dizi izlemek düğmesine tuşları itibaren
  7. basmasını isteyin (döngü arasındaki duraklama 25ms yeterli olduğunu)

Doğrudan giriş ve diğerleri, diğer kullanıcı giriş cihazları için daha kullanılabilir. Klavye ve fare için - GetKeyState en iyisidir.