OK; Meine Frage wäre gewesen, ob es das WebBrowser-Steuerelement nicht auch tut, aber offensichtlich bist du auf den IE festgelegt.
Ab dem IE7 sieht mir das so aus, als würde erst einmal eine Instanz des IE gestartet, die dann eine nächste Instanz startet, welche die von dir gewünschte Datei anzeigt. Warum unter Vista die erste Intanz dann auch noch angezeigt wird, kann ich dir momentan nicht sagen. Hinter dem IE7 steht auf jeden Fall eine ganz andere Technik als hinter dem IE6. Einen Prozess des IE zu starten und dabei die PID ausgeben zu lassen, führt wohl aus o. g. Gründen nur beim IE6 zum Erfolg. Beispiel dazu:
Option Explicit
Dim PID As Long
Private Sub Command1_Click()
PID = Shell("C:\Programme\Internet Explorer\iexplore.exe", vbNormalFocus)
MsgBox (PID)
End Sub Folgende Vorgehensweise würde dazu führen, dass zumindestens im IE7 und IE8 unter XP beim ersten Start eine Instanz geöffnet würde und danach bei jedem Ausführen in derselben Instanz ein neuer Tab geöffnet würde:
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As _
Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Command1_Click()
ShellExecute Me.hwnd, vbNullString, "d:\irgendwas\irgendwas.html", _
vbNullString, "C:\", SW_SHOWNORMAL
End Sub Du könntest vermeiden, jedes Mal einen neuen Tab zu öffnen, wenn du vor dem Ausführen die Fenster abfragst und zwangsweise den Internet Explorer beendest. Allerdings beendet das ALLE Fenster, die irgendwie "Windows Internet Explorer" als Namen beinhalten...
Z. B. auf deiner Form mittel Command1_Click:
<pre><code>Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As _
Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Command1_Click()
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
ShellExecute Me.hwnd, vbNullString, "d:\irgendwas\irgendwas.html", _
vbNullString, "C:\", SW_SHOWNORMAL
End Sub In ein Modul:
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As _
Any) As Long
Const WM_CLOSE = &H10
Private Declare Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As Long) _
As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal _
lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd _
As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" ( _
ByVal hwnd As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As _
Boolean
Dim sSave As String
Dim Ret As Long
Ret = GetWindowTextLength(hwnd)
sSave = Space(Ret)
GetWindowText hwnd, sSave, Ret + 1
If Right(sSave, 25) = "Windows Internet Explorer" Then
SendMessage hwnd, WM_CLOSE, ByVal 0&, ByVal 0&
End If
EnumWindowsProc = True
End Function Dieser Code ist nicht getestet, da ich hier kein Vista zur Verfügung habe!
EALA FREYA FRESENA |