5

我从来没有真正在 Stack Overflow 上提出过问题,尽管我遇到的几乎所有编程问题都在这里找到了答案。可悲的是,今天不是那些日子之一。

我花了一整天的时间在谷歌上搜索,浏览 win32 api,并尝试了各种各样的东西,但我就是找不到我正在寻找的该死的答案。

情况是这样的:我创建了一个 Unity 项目,它使用来自操纵杆的输入,该项目除了统一之外还有其他组件,但这无关紧要,我的问题的基础是:我该如何制作应用程序在失焦/不活动时继续接受输入。

我知道这是可以做到的,因为《无主之地 2》可以做到(昨天我第一次开始尝试寻找答案时发现了这一点,这很令人恼火,因为这证明有办法,但我没有找到它)。

至少如果有人知道如何为鼠标或键盘执行此操作,那将足以让我弄清楚如何将其应用于操纵杆。

一些有用的细节:我是一名狂热且经验丰富的程序员,多年来我一直在使用以下语言进行编码:C/C++、C#、Java 和多种脚本语言。这是我的业余爱好,为了我的工作,在我的业余时间,当我睡觉的时候......

我做过/尝试过的事情:

  • 使用SetFocus+ SetActivefrom &作为窗口失去焦点user32传递null
  • 添加WM_KILLFOCUS到我想在后台读取输入的另一个窗口的忽略列表
  • 用来sendmessage欺骗另一个窗口读取输入
  • 覆盖inputstream应用程序(但这是无用的意义我无法弄清楚如何通过流发送操纵杆输入,并且还因为如果其他应用程序失焦(即我打开)它仍然没有解决问题意义记事本),输入将停止。

  • 我还寻找了一种让 Unity 独立游戏/项目/应用程序在后台接受输入的方法,但这没有产生任何结果。

4

2 回答 2

3

我不知道是否有与 Unity 相关的解决方案,但您可以使用RawInput API直接从 Mouse/Joystick/HID 硬件接收事件,无论您的应用是否处于焦点。

于 2013-08-15T20:38:08.967 回答
0

我真的认为@RemyLebeau 给出的答案是跟踪输入的正确方法。但是,如果您喜欢进行黑客攻击,则可以使用GetForegroundWindow, GetWindowThreadProcessId,AttachThreadInput附加到活动的 UI 线程。但是随后您需要“拉”输入状态(例如,使用GetKeyStateGetKeyboardStateGetKeyboardState并在切换线程以分离/附加到新线程时跟踪焦点。您不能只等待(例如,使用GetMessage)将输入消息发布到不同的线程。

于 2013-08-16T07:07:15.707 回答