2009-09-15 65 views
0

基本上,當一個類型發生keydown事件時。如果按鍵保持超過一定時間(〜1秒),則重複按鍵直到鎖定爲止。我想改變密鑰在我的C++應用程序中被自動壓縮的時間。如何才能做到這一點?改變擊鍵速度C++

由於

+0

即時製作俄羅斯方塊遊戲 – jmasterx 2009-09-15 21:24:37

回答

3

在哪個按鍵變成自動重複是由Windows控制的速度。

如果您想操縱按鍵的自動重複,則輪詢鍵的狀態而不是等待keydown事件可能更有利。這取決於您需要應用程序的響應程度。

這篇文章可以幫助你找出如何查詢關鍵州:link

0

一個簡單的方法來處理這個問題是建立一個緩衝的時間圍繞onKeyDown事件。設置一個計時器,確定控制是否傳遞給輔助事件處理程序。如果定時器已過期,則可以通過控制。如果計時器沒有過期,那麼你應該返回並且不處理事件。在將控制權傳遞給輔助事件處理程序之前啓動計時器。

void KeyDownHandler(...) 
{ 
    // ... 
    if (TimeLeft() <= 0) 
    { 
     StartTimer(); 
     handleKeyDown(); 
    } 
} 

計時器比計數的重複事件,因爲你不能假設一個給定的系統將設置爲你相同的重複率更好。

我同意斯圖亞特所說的關鍵狀態輪詢可能會更好。這取決於你試圖完成什麼。

還要注意,這種行爲可能會非常惱人你的用戶 - 爲什麼你需要忽略重複?

+0

不是依賴於鍵盤自動重複(每個系統都會有所不同),只需跟蹤鍵是關閉還是關閉,然後在您的應用中手動執行自動重複。 KeyDownHandler應該啓動定期重複計時器,並且KeyUpHandler應該清除它。 – 2011-09-19 23:57:51

-1

使用SetKeySpeed API(內核)

+0

不要只爲您的應用更改全局設置。 – 2011-09-19 23:55:41

0

你也許能夠挖掘到Windows API,但這可能是由操作系統來控制。不確定... 您可能需要手動繪製命令,例如在按下按鍵後的數秒後模擬按鍵多次。

1

您可以使用SystemParametersInfo函數更改鍵盤延遲和刷新率,如this newsgroup thread中所述。

+0

+1,但爲了一個應用程序的好處而改變全局設置並不是一個好主意 - 在這種情況下,Stuart的答案更好。 – 2012-06-09 21:20:37