2014-09-02 87 views
0

我正在研究涉及遠程控制的應用程序。鍵盤和鼠標狀態每秒更新約100次,保存在陣列上,在互聯網上發送並進行復制。完美的播放時機是必需的。從現在開始,我只編寫了鍵盤部分,實際上它比Windows消息傳遞更容易編程。我所要做的就是在主機上每9毫秒調用一次GetAsyncKeystate,然後在客戶端上每9毫秒使用一次SendInput來獲得完美的時序。勳章的另一面是,我將不得不手動檢查主窗口是否突出顯示,如果不是,請避免調用GetAsyncKeyState。但是現在我要編碼鼠標部分,我對使用什麼方法有疑問,因爲即使沒有窗口消息,鼠標的完美時間也很難實現。這就是爲什麼我要問那些比我更有經驗的程序員: 在這種情況下,使用GetAsyncKeyState和GetCursorPos的組合還是使用Windows Messaging更好?兩者的積極和消極之處是什麼?提前致謝。C++ GetAsyncKeyState和GetCursorPos與Windows消息傳遞

+0

如果用戶按下兩個小於9ms的鍵,該怎麼辦?你不會知道首先發送哪一個。這對於轉換+信件很重要。 – 2014-09-03 00:38:51

+0

他們將按此順序發送(從上到下)http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx 無論如何,你描述的情況很少見,因爲用戶在少於9毫秒內很少擊中兩個鍵,而應用程序是爲遊戲而設計的。 – Alex 2014-09-03 01:00:43

+0

我認爲視頻遊戲就是這種情況,最有可能的是快速連續按下多個按鍵。他們被按下的順序可能很重要。 – 2014-09-03 02:11:20

回答

1

你會想要使用Windows掛鉤。請參閱SetWindowsHookEx和相關文檔。這也可以用於鍵盤事件。

在最近的Windows版本中,還有一個更新的異步輸入捕獲技術,目前這個技術的名字讓我不知所措。谷歌也是如此。

編輯:

我記得現在:其他技術被稱爲事件掛鉤。請參閱SetWinEventHook函數。

0

GetAsyncKeyState和GetCursorPos是您的最佳選擇。代碼越簡單,你的程序就能夠越快。考慮到通過像SendMessage()這樣的函數發送Windows消息可以讓你選擇不同程序的許多不同方面,這通常意味着SendMessage()函數內部會發生更多進程,並且速度會按順序排除爲其他應用程序提供實用性。

我也想指出,你將永遠無法獲得完美的時機,因爲你事實上是從源計算機收集數據,將它傳遞給一個數組並將它發送到在線。

摘要:利用GetAsyncKeyState和GetCursorPos的 優點: 你不會找到檢索數據比因爲他們的功能,只有期待做小的基本任務這些功能更快的任何功能。 SendMessage類型的函數會稍微慢一些,因爲它們內部有更多的編碼,使得它們不僅僅能夠使用鼠標和鍵盤功能。

缺點...我真的沒有看到任何。

+1

鉤子和自定義設備驅動程序將比輪詢GeyAsyncKeyState和GetCursorPos更快。 – 2014-09-03 00:32:40