我有一个开源(VC ++ / VS2010)项目库,我在过去几天测试。我可以在服务器上挂钩(使用Detours)DirectX9游戏,然后将捕获的屏幕缓冲区发送到客户端。客户端将视频视为视频。您可能知道Cloud Gaming是常态。 但我遇到了一个严重的问题。 当我在客户端玩游戏时,一切正常,在客户端捕获的所有事件(鼠标/ kb)都被发送回服务器,服务器重放它们,很好! - 我可以从日志中看到事件正确到达服务器。但是一旦服务器上的游戏窗口最小化,一切都变得疯狂。 日志显示鼠标和KB事件正在到达服务器,但由于它们最小化了游戏窗口,因此游戏不会对我的点击做出反应。简单来说
1)服务器是一个连接到游戏exe的DLL。 2)一旦挂钩,客户端可以连接到服务器,客户端事件被中继到服务器,服务器将事件发送到游戏中。游戏玩得很好! 3)当我最小化游戏窗口时 - 无论我做什么,游戏都不会做出反应。我仍然看到客户端上可以看到游戏窗口。
这是否意味着Windows7(64位)基本上是" EATING"在服务器将它们转发给游戏之前将事件消除?或者仅仅因为游戏被最小化,当服务器接受事件时,鼠标和kb事件已被Windows接管。
SendInput(...)调用Windos API函数来重放服务器上的事件,该事件基本上是在从网络接收客户端输入时将事件发送到钩子游戏窗口(SetWindowsHookEx)。