C++ C++;winAPI基础-通过windows切换
不太清楚该如何解释清楚。基本上,问题是我正在寻找一种方法来更改当前活动窗口(自产定义,希望它足够容易理解)-窗口,其中文本现在直接键入。喔 我allready发现的是help和SetFocus()或SetActiveWindow(),但它并不能解决我的问题(或者,也有可能的是,我只是以错误的方式使用了它) 简单地说:C++ C++;winAPI基础-通过windows切换,c++,winapi,C++,Winapi,不太清楚该如何解释清楚。基本上,问题是我正在寻找一种方法来更改当前活动窗口(自产定义,希望它足够容易理解)-窗口,其中文本现在直接键入。喔 我allready发现的是help和SetFocus()或SetActiveWindow(),但它并不能解决我的问题(或者,也有可能的是,我只是以错误的方式使用了它) 简单地说: HWND Dest = GetFocus(); ... //Some moving around on the 'alt-tab level' :-| SetFocus(Dest)
HWND Dest = GetFocus();
... //Some moving around on the 'alt-tab level' :-|
SetFocus(Dest);
不会再次将Dest窗口设置为活动状态。
请原谅这些新手的问题,希望不会占用你太多时间。塔克斯 尝试使用该函数
但是请注意,这方面存在一些限制,MSDN页面备注部分对此进行了解释,我在这里复制了这些限制
系统限制哪些进程可以设置前台窗口。A.
只有满足以下条件之一时,进程才能设置前景窗口
条件是正确的:
- 这个过程就是前景过程。该进程由前台进程启动
- 进程接收到最后一个输入事件李>
- 没有前台进程李>
- 正在调试前台进程李>
- 前景未锁定(请参见LockSetForegroundWindow)李>
- 前台锁定超时已过期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)李>
- 没有激活的菜单
- 这个过程就是前景过程李>
- 该进程由前台进程启动
- 进程接收到最后一个输入事件
- 没有前台进程
- 正在调试前台进程
- 前景未锁定(请参见LockSetForegroundWindow)
- 前台锁定超时已过期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)
- 没有激活的菜单
您是否尝试过使用
setforegroundindow
函数?您可以调用setforegroundindow
,但它不起作用。用户可以决定前景中的内容。你的程序没有。将窗口置于顶部不是那么必要,另一个问题是它不允许在那里键入内容。它所使用的上下文非常原始,正如我所写的,所以我不知道它怎么会失败。在使用SetFocus()/SetActiveWindow之后,击键仍然应用于上一个窗口。Thx对你们大家来说太多了。虽然有点老套,但最终还是成功了。GetForeGroundIndow()和SetForeGroundIndow()终于对我起作用了。看来我在理解的层次上错了,只是将当前工作窗口存储在HWND obj中。GetFocus()正常终止,但事实上存储在Dest中的值等于NULL。很明显,SetFocus()失败了。你能告诉我这一点吗?我做错了什么?如果GetFocus()返回NULL,那么正如文档所说:“如果调用线程的消息队列没有与键盘焦点关联的窗口,则返回值为NULL。”这意味着当应用程序没有键盘焦点时,你正在调用GetFocus()。正如David Heffernan在原始帖子的评论中所说,你不能强迫用户在上面安装某个应用程序。