2012-01-22 20 views
0

私は、Windows 7 x64でGetAsyncKeyState(i)をC#で使用しようとしています。それはx86で完璧に動作します。以下は私のコードです:Windows 7 x64のGetAsyncKeyState

[DllImport("user32.dll")] 
public static extern int GetAsyncKeyState(long vKey); 
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] 
public static extern short GetKeyState(int keyCode); 

     search = false; 
     int key_my; 
     for (i = 0; i < 255; i++) 
     { 
      key_my = GetAsyncKeyState(i); // this should return -3.... but it does 46........... 
      if (key_my == (System.Int16.MinValue + 1)) 
      { search = true; break; } 
     } 
     if (search == true) 
     { 
      ...//using if to keys here. 
     } 

IDEA?

+0

これはVB6宣言です。正しいものを見つけるにはpinvoke.netを使います。 –

答えて

5

GetAsyncKeyState機能がshortの戻り値の型ではないintを持っている必要があり、それがパラメータだが、この質問が既に正しく回答されているが、私は私を指摘したいと思いますintないlong

[DllImport("user32.dll")] 
public static extern short GetAsyncKeyState(int vKey); 
+0

完璧に動作します!アドバイスありがとうございます。 –

0

に入力する必要がありますこの回答を使用して経験し、それを1行に入れることはではなく、の仕事をします。

 if (GetAsyncKeyState(27) == (System.Int16.MinValue + 1)) 

ませ作業を行います。

   int key_my = GetAsyncKeyState(27); 
       if (key_my == (System.Int16.MinValue + 1)) 

作業を行います。

(理由はわかりません)

関連する問題