Hallo, ich habe ein Problem mit dem in Vordergrund setzen eines minimierten externen Programm. Ich habe zwei Buttons in meine Form eingefügt, der eine öffnet den Internet Explorer mit einer bestimmten Adresse über die ShellExecute Funktion und der andere Button öffnet eine externe Exe.
Beim Internet Explorer funktioniert das in Vordergrund setzen tadellos, außer wenn der IE minimiert wurde, dann öffnet er nur die Taskleiste und markiert den Taskleisteneintrag des IE. Der Internet Explorer wird also nicht in den Vordergrund gebracht. Prinzipiell ist dies zwar kein Beinbruch, ich würde aber gerne wissen ob es möglich ist dies zu verhindern bzw. zu korrigieren.
Hier das Click-Event für den IE-Aufruf:
Private Sub cmdDoku_Click()
On Error GoTo Error_Handler
Dim lhWnd As Long
Dim show As Long
Dim sTitle As String
Dim lRetVal As Long
Dim sClassName As String
Dim CurHWnd As Long
Dim nLen As Long
Dim sBuffer As String
If IsEXERunning("iexplore.exe") Then
Screen.MousePointer = 11
CurHWnd = GetWindow(hwnd, GW_HWNDFIRST)
Do While CurHWnd <> 0
' Klassennamen ermitteln
sClassName = String$(256, " ")
lRetVal = GetClassName(CurHWnd, sClassName, 255)
sClassName = Left$(sClassName, InStr(sClassName, Chr$(0)) - 1)
If sClassName = "IEFrame" Then
SetForegroundWindow CurHWnd
End If
' Handle des nächsten Fensters
' 0, wenn kein weiteres Fenster vorhanden
CurHWnd = GetWindow(CurHWnd, GW_HWNDNEXT)
Loop
Screen.MousePointer = 0
Else
ShellExecute Me.hwnd, "Open", _
"http://desiaugetc9-004/SKKernmachereiWeb/start.htm", _
vbNullString, vbNullString, 1
End If
Exit Sub
Error_Handler:
Dim MsgBoxButton As Long
MsgBoxButton = MsgBox("FCentral.PRIVATE SUB CMDDOKU_CLICK:'" & _
Err.Description & "'. Continue?", vbYesNo)
If MsgBoxButton = vbYes Then Resume Next
If MsgBoxButton = vbNo Then End
End Sub Den Code habe ich aus einem VB-Workshop. Ich habe diese Problem schon öfters in diversen Foren gesehen, aber noch keine richtige Lösung gefunden.
Der zweite Button für die externe Anwendung stellt mich vor das größere Problem, hier wird, wenn die Anwendung minmiert wurde, die Taskleiste überhaupt nur sporadisch geöffnet und dann der Taskleisten Eintrag noch nicht mal markiert.
Hier der VB Code des Aufruf der externen Anwendung:
Private Sub cmdWorkingCard_Click()
On Error GoTo Error_Handler
Dim Retval As Long
'Dim hWnd As Long
Dim lhWnd As Long
Dim show As Long
Dim sTitle As String
Dim lRetVal As Long
Dim sClassName As String
Dim CurHWnd As Long
Dim nLen As Long
Dim sBuffer As String
If IsEXERunning("Arbeitskarte.exe") Then
sTitle = "PDF VIEWER v2.0"
lhWnd = FindWindow(vbNullString, sTitle)
ShowWindow lhWnd, vbNormalFocus
' ______________________________________________________
' Test Alt----------------------------------------START
Screen.MousePointer = 11
CurHWnd = GetWindow(hwnd, GW_HWNDFIRST)
Do While CurHWnd <> 0
' Klassennamen ermitteln
sClassName = String$(256, " ")
lRetVal = GetClassName(CurHWnd, sClassName, 255)
sClassName = Left$(sClassName, InStr(sClassName, Chr$(0)) - 1)
If sClassName = "TPDFViewer" Then
SetForegroundWindow CurHWnd
End If
' Handle des nächsten Fensters
' 0, wenn kein weiteres Fenster vorhanden
CurHWnd = GetWindow(CurHWnd, GW_HWNDNEXT)
Loop
Screen.MousePointer = 0
'___________________________________________________________
' Test Alt----------------------------------------ENDE
Else
Retval = ShellExecute(Me.hwnd, "open", _
"C:\SuK\Arbeitskarte\Arbeitskarte.exe", _
"C:\SuK\Task_umschalten\Arbeitskarte.exe", "C:\SuK\Arbeitskarte\", 5)
'Retval = ShellExecute(Me.hwnd, "open",
' "C:\SuK\Arbeitskarte\Arbeitskarte1024_768.exe",
' "C:\SuK\Task_umschalten\Arbeitskarte.exe", "C:\SuK\Arbeitskarte\", 1)
End If
Exit Sub
Error_Handler:
Dim MsgBoxButton As Long
MsgBoxButton = MsgBox("FCentral.PRIVATE SUB CMDWORKINGCARD_CLICK:'" & _
Err.Description & "'. Continue?", vbYesNo)
If MsgBoxButton = vbYes Then Resume Next
If MsgBoxButton = vbNo Then End
End Sub Wenn mir diesbezüglich jemand helfen könnte, wäre ich äußerst dankbar.
Mit freundlichen Grüßen
Armin Ruh
Beitrag wurde zuletzt am 27.06.12 um 09:51:57 editiert. |