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

在VB6中等待进程退出后恢复窗口,vb6,window,process,Vb6,Window,Process,我在win7 64位操作系统中使用VB6。此应用程序已从xp迁移 Me.WindowState = vbMinimized WaitForProcess Shell(launchapp, vbNormalFocus) Me.WindowState = vbNormal 在启动launchapp之前,我的代码会最小化主应用程序并启动一个exe。一旦用户关闭了exe,我的主应用程序就必须从最小化状态恢复到正常状态。这在xp中运行良好,但在Win7中,我的主应用程序被最小化,只会闪烁并再次返回最小化

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

Me.WindowState = vbMinimized
WaitForProcess Shell(launchapp, vbNormalFocus)
Me.WindowState = vbNormal
在启动launchapp之前,我的代码会最小化主应用程序并启动一个exe。一旦用户关闭了exe,我的主应用程序就必须从最小化状态恢复到正常状态。这在xp中运行良好,但在Win7中,我的主应用程序被最小化,只会闪烁并再次返回最小化状态

有什么想法吗


谢谢。

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


这是API声明,搜索谷歌的用法。这里有一些信息:。如果需要在不同的进程中控制窗口,还需要另一个API—AllowSetForeGroundIndow。

windows 7将不允许应用程序使用SetForeGroundIndow获取焦点,如中所述。见备注

一种解决方法是暂时
将ThreadInput
附加到具有焦点的线程,给自己焦点,然后再次分离。Karl E Peterson提供了一个方法来实现这一点


免责声明:Windows专家Raymond Chen指出,这种解决方法在某些情况下是可行的。然而,我自己从来没有遇到过这些错误。YMMV

您好,我确实尝试过使用SetForeGroundindow API。但应用程序仍然闪烁并返回到最小化状态。我甚至尝试过SetFocus API,但没有用。好吧,这是不同的问题。如果您在设置窗口状态之前/之后编写DoEvents(以及一些可选的等待,大约1秒),这会改变什么吗?在W7/64的调试器下,它是否会以这种方式运行?在Windows 7和更高版本(以及Vista AFAICR)中,当允许应用程序使用SetForegroundWindow获取焦点时,存在一些限制。正如在报告中所解释的那样。如果您炮击了另一个应用程序,并赋予它焦点,那么您可能已经放弃了恢复焦点的能力。Windows不允许任何旧程序出现在前台并抓住焦点。嗨,Arvo,DoEvents为我做了这项工作。但是调用DoEvents并控制操作系统,这会导致任何问题吗?在vb6中调试时,有没有跳过DoEvents的方法?应该没有任何区别,至少就你的情况而言。类似于但不是完全相同的
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long