2017-03-15 94 views
0

我有這樣的代碼,我得到了左鍵的keystate,然後如果它的真實,它使「MemeKey」設置爲true否則它會使「MemeKey」設置爲false。出於某種原因,它給我這個錯誤:無法鍵入「短」隱式轉換爲「布爾」C#GetAsyncKeyState不能正常工作

這裏是我的代碼:

 else if (GetAsyncKeyState(0x01)) 
     { 
      MemeKey = true; 
     } 

這個職位是不是GetAsyncKeyState - checking most significant bit in C#重複,因爲它在這個問題的答案說,「但你的代碼做同樣的事情,所以我想你的問題在別處。」他的問題從未解決。

+0

的可能的複製[GetAsyncKeyState - 在C#中檢查最顯著位] (http://stackoverflow.com/questions/27336213/getasynckeystate-checking-most-significant-bit-in-c-sharp) –

+0

@RaymondChen是的,但那一個從來沒有回答。 – Inzample

+0

我看到一個答案[在這裏](http://stackoverflow.com/a/27336225/902497)。 –

回答

0

GetAsyncKeyState在windows API中返回一個SHORT,我猜你的p/Invoke聲明保留了這個。你正在試圖像一個布爾值來引用它。這是試圖將短作爲布爾值作爲異常狀態。

相反,你需要測試,如果產生短的最顯著位設置,以確定鍵當前按下:

else if (GetAsyncKeyState(0x01) & 0x8000 == 0x8000) 
{ 
    MemeKey = true; 
} 
+0

現在它給了我這個錯誤:參數1:不能從'int'轉換爲'System.Windows.Forms.Keys' – Inzample

+0

你的GetAsyncKeyState的p/invoke聲明是什麼樣的?如果你有這樣的聲明,你可能需要使用System.Windows.Forms.Keys.F1等,而不是0x01。 WinAPI調用接受一個int,所以如果它在你的p/invoke聲明中聲明爲int,那麼'0x01'是正確的。 – Tim

+0

好的,現在我沒有錯誤,但它甚至沒有拿起我的左鍵點擊 – Inzample