ShowWindowAsync不会激活隐藏的+最小化窗口?

时间:2011-09-26 22:51:42

标签: winapi shell windows-xp window

首先将给定的外部(不是当前进程所拥有)窗口(hWnd)最小化,然后隐藏:

ShowWindowAsync(hWnd, SW_MINIMIZE);
// wait loop inserted here
ShowWindowAsync(hWnd, SW_HIDE);

以下调用正确地将其恢复为未最小化(恢复)状态:

ShowWindow(hWnd, SW_RESTORE);

但是,此次通话不会:

ShowWindowAsync(hWnd, SW_RESTORE);

在使用ShowWindowAsync()的第二个实例中,窗口未被最小化并且不再隐藏,但它未被激活(保留在其他现有窗口后面)。相反,第一个ShowWindow()调用会正确激活窗口。

这是预期的行为吗? 如何在不依赖于同步(阻塞)的ShowWindow()的情况下恢复窗口(到前台)?(示例中的等待循环可以超时,而{{1 }}不允许指定超时。)

(WinXP SP3)

2 个答案:

答案 0 :(得分:1)

ShowWindowAsync将show-window事件发布到给定窗口的消息队列。特别是,窗口由其线程显示,而不是您的线程。不同的是你的线程是前台线程,因此可以激活另一个窗口,它不能自己做。

答案 1 :(得分:1)

以下是使用的解决方案:

ShowWindowAsync(hWnd, SW_SHOW);
// wait loop inserted here
ShowWindowAsync(hWnd, SW_RESTORE);

这实际上是用于隐藏窗口的片段的反转:

ShowWindowAsync(hWnd, SW_MINIMIZE);
// wait loop inserted here
ShowWindowAsync(hWnd, SW_HIDE);