2017-04-08 117 views
-1

我正在嘗試記錄遊戲中的鼠標移動情況,以便我可以回放它。遊戲是使命召喚4,儘管這與這個問題無關。與此相關的是,大多數第一人稱射擊遊戲在您移動鼠標光標時會重新居中,這樣您就不會碰到任何邊界。搜索一段時間後,我無法找到關於此在線的任何信息。我目前使用鼠標鉤(WH_MOUSE)來跟蹤鼠標移動(WM_MOUSEMOVE)。當我列出這些消息時,我可以看到光標被拉回screenResolutionX/2,screenResolutionY/2(屏幕中心)。在遊戲重新居中前獲取遊標在遊戲中的位置

我第一次嘗試解決這個問題就是忽略這些消息,如果它們等於屏幕中心,所以當我回放這些鼠標移動時,重新居中會被忽略。我認爲這可以解決問題,但現在當我回放鼠標移動時,鼠標變得太遠(與我記錄的方式不同)。當我在遊戲的主菜單中進行相同的錄製/回放(光標未被重新居中)時,回放非常準確。我的問題是:考慮到遊戲會重新集中光標,我該如何準確記錄遊戲中的鼠標移動?

在此先感謝。

編輯:讓我澄清我在問什麼。我只想記錄實際的用戶鼠標輸入,而不是重新集中鼠標光標的遊戲。

+0

聽起來像你應該攔截鼠標**之前,**他們被髮送到遊戲的窗口。雖然我不確定如何去做這件事,但TBH – YePhIcK

+0

我已經遇到過SO帖子,但我不同意驅動程序/過濾器是完成我所要做的事情所必需的。只有當我想在鼠標數據到達Windows之前攔截鼠標數據時,情況纔會如此,而不是在重新集中之前我想攔截它。也許有一種方法可以確定鼠標消息的來源,如果它是由遊戲進程發送的,那麼我會忽略它?我找不到像這樣的東西.. –

+0

「Windows」是一個超載的術語。在上面的上下文中,「窗口」的意思是「遊戲的窗口」,而不是「Windows的操作系統」 – YePhIcK

回答

-1

爲了攔截這些鼠標消息,您必須創建過濾器驅動程序或鉤子。這裏有一個很好的文章(附代碼)關於這個問題:

http://www.oblita.com/interception.html

物品爲在此基礎上Windows API: SetWindowsHookEx和應和你一個很好的起點。

+0

我正在使用Windows掛鉤,正如我在原始帖子中提到的那樣。但是,遊戲還會發送重新集中WM_MOUSEMOVE消息。我也收到了這些信息,這意味着我無法確定實際的鼠標移動(因爲有時WM_MOUSEMOVE包含鼠標的小移動和重新居中,所以我無法將其過濾掉)。我不認爲過濾器驅動程序是完成我想要的。攔截不是問題 - 我想能夠區分重新居中和實際鼠標輸入。 –

+0

由於您知道屏幕的幾何形狀和當前鼠標位置(如果有的話 - 至少基於以前截取的鼠標移動消息),您總是可以知道鼠標移動消息是否將其移動到中心位置。這不正確嗎? – YePhIcK

+0

但我怎麼能區分使用移動鼠標靠近中心與遊戲重新居中? –