2011-06-13 10 views
5

Bir tuşa basıldığında bir boole olayına geçiş yapmak isterim. Özellikle, 's' tuşu. Win32 API'sinde çalıştığı varsayılan GetKeyState() işlevine işaret ettim. Mektupta 's' 115 ASCII kodunu anlamak ve böylece benim kod aşağıdaki gibidir:GetKeyState'ı Kullanma()

if (GetKeyState(115) == 1) 
{ 
<EVENT> 
} 

Ancak bu işe yaramaz. Niye ya? İşte MSDN referanstır: http://msdn.microsoft.com/en-us/library/ms646301%28v=vs.85%29.aspx ... Anladığım kadarıyla

cevap

14

yapmanız gereken "alt sıra biti 1 ise, tuş duruma getirildiğinden":

if(GetKeyState(115) & 0x8000) 
{ 
    <EVENT> 
} 

en yüksek bit varsa söyler tuşuna basılır. En düşük anahtarın değiştirilip değiştirilmediğini söyler (kapak kilidi açıksa).

+1

Teşekkürler, bunu denedim ama 's' düğmesine bastığımda hala olayım oluşmuyor. Program yine de iyi derler. Win32 API kullanıyorum, başka bir şey eksik miyim? Derleyici açıkça fonksiyonunu tanır ... – CaptainProg

+0

Belki de [GetAsyncKeyState] (http://msdn.microsoft.com/en-us/library/ms646293). Klavye olayına yanıt olarak 'GetKeyState' çağrılmalıdır. –

+0

Harf tuşlarının sanal anahtar kodları, büyük harflerin ASCII kodlarına karşılık gelir. Ve kodun daha okunabilir olmasını sağlayan 'int' yerine bir' char' bile kullanabilirsiniz. Yani GetKeyState ('S') ' – kiw

-5

Bunun için biraz geç ama yüksek sipariş biti 0x80000000 değil 0x8000, bunu değiştir ve iyi çalışacaktır.

Diğer bit - hiçbir şey için kullanışsız - LSHIFT düğmesine bastığınızda CAPS LOCK düğmesine bastığınız gibi davranır.

+5

'u deneyin. [GetKeyState MSDN referansı] 'nda belirtildiği gibi (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646301 (v = vs.85) .aspx), dönüş değeri bir "SHORT" (16 bit), bir 32 bit değeri değil (başka bir deyişle, '0x80000000' geçerli değil). – EDDY74

5

KISA imzalandığında, yüksek sıra biti eşittir bit biti.

Bu nedenle, belirli bir tuşa basıldığında, sadece GetKeyState() tarafından döndürülen değeri negatif olup olmadığını test test etmek için:

if (GetKeyState('S') < 0) { 
    // The S key is down. 
} else { 
    // The S key is up. 
} 

Bunun yanı sıra, 115 's' ASCII kodudur. 'S' anahtarını test etmek için 83 numaralı büyük harf kullanmalısınız.