我在win7 64位操作系统中使用VB6。此应用程序是从xp迁移过来的。
Me.WindowState = vbMinimized
WaitForProcess Shell(launchapp, vbNormalFocus)
Me.WindowState = vbNormal
在启动启动章节之前,我的代码最小化了主应用程序,并将启动一个可执行文件。一旦用户关闭了exe,我的主应用程序就必须从最小化状态返回到正常状态。这在xp中工作得很好,但在Win7中,我的主应用程序被最小化了,它只是闪烁,并再次回到最小化状态。
有什么想法吗?
谢谢。
发布于 2012-09-25 20:01:34
正如documentation中解释的那样,Windows7将不允许应用程序使用SetForegroundWindow来抢占焦点。请参阅备注。
一种解决方法是暂时AttachThreadInput
到具有焦点的线程,将焦点交给自己,然后再次分离。Karl E Peterson提供了一个drop-in module来完成此任务,here附带magazine article。
免责声明: Windows专家Raymond Chen指出,在某些情况下,这种解决方法是can cause your program to stop responding。然而,我自己从来没有遇到过这些bug。YMMV.
发布于 2012-09-25 15:01:46
我们正在使用Win32应用程序接口函数SetForegroundWindow来解决类似的问题(一些窗口,特别是进程外的窗口,将保留在我们W7上的主应用程序窗口之后)。
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
这是API声明,在google上搜索用法。这里有一些信息:VBA interaction with Internet Explorer。如果你需要在不同的进程中控制窗口,你也需要另一个API - AllowSetForegroundWindow。
https://stackoverflow.com/questions/12576821
复制相似问题