我从来没有真正问过关于Stack Overflow的问题,尽管我曾经遇到的每一个编程问题都在这里找到答案。可悲的是,今天不是那些日子之一。
我花了一整天谷歌搜索,浏览win32 api,并尝试各种各样的事情,但我找不到我正在寻找的该死的答案。
情况就是这样:我有一个我创建的Unity项目,它使用操纵杆输入,除了统一之外还有其他组件到这个项目,但这是无关紧要的,我的问题的基础是:如何我可以让应用程序继续接受输入,而它不在焦点/非活动状态。
我知道可以做到这一点,因为Borderlands 2可以做到(我昨天在第一次开始尝试找到答案时发现了这一点,这是因为证明有办法,而且我是没找到它。)
至少如果有人知道如何为鼠标或键盘执行此操作,那么这将有助于我弄清楚如何将其应用于操纵杆。 p>
一些有用的细节:我是一个狂热而且经验丰富的程序员,多年来我一直在编写C / C ++,C#,Java和许多脚本语言。这是我的业余爱好,我的工作,业余时间,,当我睡着时 ......
我做过/尝试过的事情:
SetFocus
中的SetActive
+ user32
&将null
作为窗口传递
失去焦点WM_KILLFOCUS
添加到我想在后台阅读输入的其他窗口的忽略列表sendmessage
欺骗其他窗口阅读输入覆盖应用程序的inputstream
(但这是无用的感觉我无法弄清楚如何发送操纵杆输入
流,还因为它仍然没有解决问题的意义
如果其他应用程序失焦(即我打开记事本),
输入会停止。
我还在后台搜索了一种让Unity独立游戏/项目/应用程序接受输入的方法,但却没有产生任何结果。
答案 0 :(得分:2)
我不知道是否有与Unity相关的解决方案,但您可以使用RawInput API直接从鼠标/操纵杆/ HID硬件接收事件,无论您的应用是否处于焦点。
答案 1 :(得分:0)
我真的认为@RemyLebeau给出的答案是跟踪输入的正确方法。但是,如果您遇到黑客攻击,可以使用GetForegroundWindow
,GetWindowThreadProcessId
,AttachThreadInput
附加到活动的UI线程。但是你需要“拉”输入状态(例如,使用GetKeyState
,GetKeyboardState
或GetKeyboardState
)并跟踪焦点,因为它切换线程以进行分离/附加一个新的线程。您可以不等待(例如,使用GetMessage
)发布到其他主题的输入消息。