等待进程在VB6中退出后恢复窗口

时间:2012-09-25 05:43:23

标签: vb6 window process

我在win7 64位操作系统中使用VB6。此应用程序从xp ..

迁移
Me.WindowState = vbMinimized
WaitForProcess Shell(launchapp, vbNormalFocus)
Me.WindowState = vbNormal

在启动openschapp之前,我的代码最小化了主应用程序,并将启动一个exe。一旦exe被用户关闭,我的主应用程序必须从最小化状态恢复到正常状态。这在xp中运行良好,但在win 7中,我的主应用程序最小化只是闪烁并再次回到最小化状态。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

Windows 7将不允许应用使用SetForegroundWindow获取焦点,如documentation中所述。见评论。

一种解决方法是暂时AttachThreadInput到具有焦点的线程,给自己焦点,然后再次分离。 Karl E Peterson提供drop-in modulehere执行magazine article并附带can cause your program to stop responding

免责声明:Windows大师Raymond Chen在某些情况下指出此解决方法{{3}}。但是我自己从未遇到过这些错误。因人而异。

答案 1 :(得分:0)

我们正在使用Win32 API函数SetForegroundWindow来解决类似的问题(某些窗口,尤其是进程外的窗口,将保留在W7的主应用程序窗口之后)。

Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

这是API声明,搜索谷歌的用法。这里有一些信息:VBA interaction with Internet Explorer。如果您需要在不同的进程中控制窗口,则还需要另一个API - AllowSetForegroundWindow。