1. 程式人生 > >使用GetAsyncKeyState()非同步獲取按鍵訊息

使用GetAsyncKeyState()非同步獲取按鍵訊息

GetAsyncKeyState(VK_**)

 

記錄兩種狀態——最高位為一說明呼叫時改鍵被按下;

最低位記錄在上次呼叫該函式之前是否被呼叫過:為一則是;

第一種狀態資訊很好理解,但是第二種是什麼意思呢?

這個資訊是用來幫助我們在判斷組合鍵時使用的:
判斷方法:

if(GetAsyncKeyState(VK_**)<0);

或者

if(GetAsyncKeyState(VK_**)&0x8000)

兩種方法;

這兩種方法是判斷某鍵是否被按下的時候使用的;

除此之外,在使用該方法的時候要注意的是:

Windows的訊息機制使得按鍵訊息會不斷地響應:這樣的結果是如果在if判斷之後有迴圈,在執行迴圈的時候訊息的響應會使得程式碼跳出迴圈而中斷迴圈;響應完訊息之後繼續執行迴圈;而這次的響應可能會使得另一個程式碼段被執行;因此在邏輯上應該注意這種情況的發生;(因為在控制檯下的DOS環境中程式碼是連續執行的,而我們的迴圈設定的邏輯也是不希望在非正常情況下跳出迴圈而去執行別的程式碼,這樣會導致意外的情況發生;其實實際上我們所有的迴圈都是按照在DOS環境下的這種邏輯設定的,否則根本沒法設計迴圈邏輯,)

總而言之,就是在訊息相應中最好不用或者慎用迴圈,多采用if判斷去實現邏輯,而這也符合Windows的訊息響應機制;

其次在使用GetAsyncKeyState(VK_**)函式的時候不要忘了他的另一個功能——最低位的記錄;這會在特殊的時候很方便的幫我們實現某些功能-----------(不然為什麼要設定這個功能呢:)