我正在研究涉及遠程控制的應用程序。鍵盤和鼠標狀態每秒更新約100次,保存在陣列上,在互聯網上發送並進行復制。完美的播放時機是必需的。從現在開始,我只編寫了鍵盤部分,實際上它比Windows消息傳遞更容易編程。我所要做的就是在主機上每9毫秒調用一次GetAsyncKeystate,然後在客戶端上每9毫秒使用一次SendInput來獲得完美的時序。勳章的另一面是,我將不得不手動檢查主窗口是否突出顯示,如果不是,請避免調用GetAsyncKeyState。但是現在我要編碼鼠標部分,我對使用什麼方法有疑問,因爲即使沒有窗口消息,鼠標的完美時間也很難實現。這就是爲什麼我要問那些比我更有經驗的程序員: 在這種情況下,使用GetAsyncKeyState和GetCursorPos的組合還是使用Windows Messaging更好?兩者的積極和消極之處是什麼?提前致謝。C++ GetAsyncKeyState和GetCursorPos與Windows消息傳遞
回答
你會想要使用Windows掛鉤。請參閱SetWindowsHookEx和相關文檔。這也可以用於鍵盤事件。
在最近的Windows版本中,還有一個更新的異步輸入捕獲技術,目前這個技術的名字讓我不知所措。谷歌也是如此。
編輯:
我記得現在:其他技術被稱爲事件掛鉤。請參閱SetWinEventHook函數。
GetAsyncKeyState和GetCursorPos是您的最佳選擇。代碼越簡單,你的程序就能夠越快。考慮到通過像SendMessage()這樣的函數發送Windows消息可以讓你選擇不同程序的許多不同方面,這通常意味着SendMessage()函數內部會發生更多進程,並且速度會按順序排除爲其他應用程序提供實用性。
我也想指出,你將永遠無法獲得完美的時機,因爲你事實上是從源計算機收集數據,將它傳遞給一個數組並將它發送到在線。
摘要:利用GetAsyncKeyState和GetCursorPos的 優點: 你不會找到檢索數據比因爲他們的功能,只有期待做小的基本任務這些功能更快的任何功能。 SendMessage類型的函數會稍微慢一些,因爲它們內部有更多的編碼,使得它們不僅僅能夠使用鼠標和鍵盤功能。
缺點...我真的沒有看到任何。
鉤子和自定義設備驅動程序將比輪詢GeyAsyncKeyState和GetCursorPos更快。 – 2014-09-03 00:32:40
- 1. 瀏覽器和Windows消息傳遞
- 2. 消息隊列與消息傳遞
- 3. C#即時消息傳遞
- 4. 消息傳遞與boost :: threads?
- 5. 消息傳遞與鎖定
- 6. Windows上的消息傳遞接口(MPI)
- 7. WPF和Win32消息傳遞
- 8. windows-ce中有哪些消息傳遞技術可以保證消息傳遞?
- 9. 針對windows phone的雲消息傳遞
- 10. 擴展Windows 8消息傳遞中心
- 11. 互操作性的Windows消息傳遞?
- 12. Windows窗體+ CrossThread消息傳遞異常
- 13. C++和GetAsyncKeyState()函數
- 14. C++ GetCursorPos問題
- 15. Android消息傳遞
- 16. ServiceStack Redis消息傳遞 - 即時消息?
- 17. 尋找一個類似於GetAsyncKeyState或GetCursorPos的功能
- 18. msgpack:C++和java之間的消息傳遞
- 19. Node.js和MPI(消息傳遞接口)
- 20. C中的Firebase雲消息傳遞#
- 21. C++消息傳遞的疑惑
- 22. 多線程C++消息傳遞
- 23. 消息傳遞在C++函數
- 24. C#傳遞布爾值作爲消息
- 25. 將消息從C傳遞給erlang
- 26. 將消息傳遞給C++調用者
- 27. C++消息像MPI一樣傳遞庫
- 28. C#通過串口傳遞消息
- 29. 消息傳遞與observable不起作用
- 30. 谷歌與CCS的雲消息傳遞
如果用戶按下兩個小於9ms的鍵,該怎麼辦?你不會知道首先發送哪一個。這對於轉換+信件很重要。 – 2014-09-03 00:38:51
他們將按此順序發送(從上到下)http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx 無論如何,你描述的情況很少見,因爲用戶在少於9毫秒內很少擊中兩個鍵,而應用程序是爲遊戲而設計的。 – Alex 2014-09-03 01:00:43
我認爲視頻遊戲就是這種情況,最有可能的是快速連續按下多個按鍵。他們被按下的順序可能很重要。 – 2014-09-03 02:11:20