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.
- 1. Form görünmeden önce Fare düğmesine zaten basıldığını algılar
- 2. Android, NumericUpDown Düğmesine sahip mi?
- 3. VBS fare tıklamaları gönderir mi?
- 4. Javascript yürütme işlemini durdurma düğmesine basılıncaya kadar düğme
- 5. Gosu neden fare işaretçimi mi saklıyor?
- 6. Fare hareketlerini normalleştirin ve düzgünleştirin mi?
- 7. Uygulamayı etkinleştirmeden fare tıklamaları kabul edilir mi?
- 8. Kullanıcı WPF TextBox'tan çıkmak için klavye mi, fare mi kullandı?
- 9. Fare
- 10. Uzun düğmesine
- 11. Aygıt belirteci, aygıt kimliği kadar benzersiz mi?
- 12. Fare Vurgusu
- 13. Fare tıklamaları, klavye odağını varsayılan olarak odaklanabilir denetimlere getirir mi?
- 14. Ünlü bir yüzeyi sürükleyin ve fare başlangıçtaki kökenine mi dönün?
- 15. TextArea parçacığı, çalışma zamanında fare tarafından yeniden boyutlandırılabilir mi?
- 16. Windows 10, fare imlecini geciktirerek pencereyi etkinleştirir mi?
- 17. Ana sayfa düğmesine Phonegap/iOS düğmesine basıldığında localStorage öğesine erişme
- 18. MainActivity (Geri) düğmesine basarak geri ve geri düğmesine basın.
- 19. Jquery Fade Fare, öğe
- 20. Tut İşte geri düğmesine
- 21. Hangi JSpinner düğmesine basıldı?
- 22. Fare jQuery
- 23. önleme fare Ben 'kalem' düğmesine yüzer kenar çubuğunda duruma getirildiğinden sonra fare ile ekrana çizim için biraz aracı yapıyorum şeffaf Windows Form
- 24. Bluetooth fare/klavye öykünmesi
- 25. Fare tıklamasıyla katmanları görünmez hale getirme
- 26. Fare hareket halindeyken Java fare olayları göz ardı ediliyor mu?
- 27. Update() + Raycast + etiketi, fare
- 28. Döngü İçinde Fare Tıklatıldığında Döngü
- 29. LINQ Count() şu tarihe kadar, daha verimli mi?
- 30. Memcache size ne kadar bellek kullandığını söyleyebilir mi?
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)). –