失焦时接受输入

时间:2013-08-15 18:58:10

标签: windows winapi focus unity3d joystick

我从来没有真正问过关于Stack Overflow的问题,尽管我曾经遇到的每一个编程问题都在这里找到答案。可悲的是,今天不是那些日子之一。

我花了一整天谷歌搜索,浏览win32 api,并尝试各种各样的事情,但我找不到我正在寻找的该死的答案。

情况就是这样:我有一个我创建的Unity项目,它使用操纵杆输入,除了统一之外还有其他组件到这个项目,但这是无关紧要的,我的问题的基础是:如何我可以让应用程序继续接受输入,而它不在焦点/非活动状态。

我知道可以做到这一点,因为Borderlands 2可以做到(我昨天在第一次开始尝试找到答案时发现了这一点,这是因为证明有办法,而且我是没找到它。)

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

一些有用的细节:我是一个狂热而且经验丰富的程序员,多年来我一直在编写C / C ++,C#,Java和许多脚本语言。这是我的业余爱好,我的工作,业余时间,,当我睡着时 ......

我做过/尝试过的事情:

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我真的认为@RemyLebeau给出的答案是跟踪输入的正确方法。但是,如果您遇到黑客攻击,可以使用GetForegroundWindowGetWindowThreadProcessIdAttachThreadInput附加到活动的UI线程。但是你需要“拉”输入状态(例如,使用GetKeyStateGetKeyboardStateGetKeyboardState)并跟踪焦点,因为它切换线程以进行分离/附加一个新的线程。您可以等待(例如,使用GetMessage)发布到其他主题的输入消息。