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
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.
Çok basit: GetKeyState
SHORT WINAPI GetKeyState(
_In_ int nVirtKey
);
Mantık kullanmak yanındadır:
- düğmelere basmak için değil kullanıcıyı sor Bırak düğmeleri devlet bastırdı
- tüm düğmeleri 0-255 için
- Döngü
GetKeyState
(bazı sanal tuşlar basılmadan bile basılabilir, nedenini bilmeden) - Şimdi başlamak tuşları dinlenme tuşları kodları için iplik izlemek ve herhangi yapıya onları kurtarmak
- herhangi bir kullanıcı tarafından düğmelere bastı göreceksiniz dizi izlemek düğmesine tuşları itibaren
- 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.
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
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)). –