VB6-向TopMost添加异常



我已经搜索了几个小时,但没有得到正确的结果。我想做的是,在我的窗体上,制作一个最上面的外部窗口1。所以我的form1是最上面的,但当默认浏览器通过shellexecute打开时,它应该保持在最上面,直到关闭。

我的代码是:

   Dim r As Long
   r = ShellExecute(0, "open", "http://www.google.com", 0, 0, 1)

当"google.com"打开时,默认浏览器应该保持在顶部,直到关闭,正如我前面提到的。

有什么像样的解决方案吗?如果是的话,如果有人能告诉我怎么做,我将不胜感激。

使用WaitForSingleObject winapi函数等待浏览器窗口关闭。检查以下链接是否相同:

如何在VB6 中执行进一步的代码之前等待shell进程完成

http://www.ex-designz.net/apidetail.asp?api_id=539

http://us.generation-nt.com/answer/how-start-notepad-modal-dialog-vb-application-help-54054422.html

查看SetWindowPos API

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

如果您的窗口和浏览器窗口都是最上面的。然后你可以把代码放在应用程序的激活事件中,这样:

SetWindowPos(browserHandle, Me.hwnd, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);

为了获得浏览器句柄,您需要使用ShellExecuteEx而不是ShellExecute。这会给你一个hProcess。使用它可以EnumWindows(),并查看哪些窗口具有该GetWindowThreadProcessID()。然后将这些窗口存储在一个列表中,并通过调用SetWindowPos api对它们进行迭代,使它们位于表单句柄后面。

如果您的窗体是MDI父窗体,则可以考虑将浏览器设为MDI子窗体,因为任何窗口都可以成为MDI子窗体。

最新更新