0

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

我的代码是:

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

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

有没有合适的解决方案?如果是这样,如果有人能告诉我该怎么做,我将不胜感激。

4

3 回答 3

2

使用 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

于 2013-06-24T07:39:20.410 回答
0

看看 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
于 2013-06-24T08:37:40.290 回答
0

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

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

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

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

于 2013-06-25T07:04:44.323 回答