我在win7 64位操作系统中使用VB6。此应用程序从xp ..
迁移Me.WindowState = vbMinimized
WaitForProcess Shell(launchapp, vbNormalFocus)
Me.WindowState = vbNormal
在启动openschapp之前,我的代码最小化了主应用程序,并将启动一个exe。一旦exe被用户关闭,我的主应用程序必须从最小化状态恢复到正常状态。这在xp中运行良好,但在win 7中,我的主应用程序最小化只是闪烁并再次回到最小化状态。
有什么想法吗?
感谢。
答案 0 :(得分:1)
Windows 7将不允许应用使用SetForegroundWindow获取焦点,如documentation中所述。见评论。
一种解决方法是暂时AttachThreadInput
到具有焦点的线程,给自己焦点,然后再次分离。 Karl E Peterson提供drop-in module来here执行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。