oma*_*tai 6 c++ windows winapi mfc windows-8.1
好吧,我明白了:专注偷窃是邪恶的.或者至少它是99.9%的时间.但我真的需要在Windows 8上可靠地窃取焦点,到目前为止,我被大量坚持专注偷窃的人总是邪恶所挫败.
场景:我们在运行Windows 8.1的普通PC上运行自定义应用程序(很快将成为Windows 10).屏幕,键盘和鼠标距离地面约5米,距离叉车操作员真正不应爬的楼梯.他们拥有的一个输入设备是扩展器电缆上的数字键盘.他们需要做的一切都可以通过键盘完成...只要一些邪恶的程序没有窃取我们的应用程序的焦点,或者某些远程用户没有注销并留下另一个重点应用程序.
该应用程序本质上是一个最大化的桌面应用程序 - 它填充屏幕(但不是严格意义上的"全屏"或"最顶层"应用程序),因此允许其他应用程序在需要时出现在它前面.但是当鼠标空闲时,我们希望此应用程序在所有其他应用程序之前恢复其"正常"位置,以便它获得焦点并且数字键盘输入将可靠地工作.
在Windows 7上,使用SetForegroundWindow()(通过AllowSetForegroundWindow()正常工作启用- 应用程序可以返回到前面并恢复焦点.在Windows 8上,SetForegroundWindow()只会导致任务栏图标闪烁,但应用程序无法重新获得焦点,迫使我们的用户爬上楼梯......全键盘和鼠标太诱人了他们不要按下按钮他们不应该,并且通常会出现混乱.
所以请先生:我的(MFC,桌面)应用程序可以在鼠标闲置1分钟后重新获得焦点,因为它或多或少是通常应该运行的唯一应用程序.如果允许,我们如何可靠地窃取它?
我会这样尝试:
GetForegroundWindow定期检查。GetForgroundWindow不属于您的进程 ( GetWindowThreadProcessId)AttachThreadInput并将输入队列附加到其他进程的输入队列。SetForegoundWindow并分离线程输入。SetFocus根据需要使用来控制您的程序的输入焦点。