2012-02-26 25 views
0

我嘗試註冊某個鍵已打開或關閉這樣的:繃鍵/ C++

if (pKeyBuffer[VK_TAB] & 0xFF81) 
{ 
    functionA(); 
} 

if (pKeyBuffer[VK_TAB] & 1) 
{ 
    functionB(); 
} 

但是有一個很大的問題在上面的代碼 - 的VK_TAB的狀態,在啓動時不知道因此,有時,我必須在運行時再次按Tab鍵將其設置爲默認狀態。

我不能使用普通'0xF0'或'0',因爲我無法承受functionA()functionB()多次調用。我需要類似開關的行爲(即如果按下Tab鍵,即使它被按住, functionA()仍然只執行一次)。

那麼有什麼辦法可以獲得關鍵狀態信息來執行第一次擊鍵?或者,也許你可以建議一些替代方法?謝謝!

回答

2

在這種情況下,您希望使用GetKeyState函數,這將在調用給定鍵時獲得按鍵和按鍵切換信息。

所以,如果你想檢查標籤是否被按下,使用GetKeyState(VK_TAB) & 0x8000,如果你想檢查是否其切換使用GetKeyState(VK_TAB) & 1

+0

你能舉個例子嗎? – 2012-02-26 06:24:09

+0

@Abdulali:它的使用非常簡單,但我反正添加了示例(在MSDN鏈接中的示例之上...) – Necrolis 2012-02-26 06:27:36

+0

GetKeyState()不起作用:從此函數返回的鍵狀態更改爲線程從其消息隊列中讀取關鍵消息。狀態並不反映與硬件相關的中斷級別狀態。使用GetAsyncKeyState函數從[GetKeyState](http://msdn.microsoft.com/en-us/library/windows/desktop/ms646301%28v=vs.85%29.aspx)備註部分檢索該信息。 – 2012-02-26 06:37:41

1

您需要GetAsyncKeyState。定義一個函數:

bool IsKeyDown(int vk) 
{ 
    return (GetAsyncKeyState(VK_TAB) & 0x8000) != 0; 
} 

而且使用這樣的:

if(IsKeyDown(VK_TAB)) 
{ 
    // The key is currently down 
} 
else 
{ 
    // The key is currently up 
} 

如果要精確趕上關鍵狀態的變化,你需要使用Windows Hooks