Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
756to760
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fremde Anwendung schließen

Fremde Anwendung schließen
29.04.2006 14:37:52
PeterG
Liebe Excelgemeinde,
ich bitte um Hilfe. Ich starte im Excel per VBA mit Shell ... eine fremde Anwendung, in diesem Fall Irfanview mit einer Dia-Show. Wenn diese beendet ist schließt Irfanview sich selbsttätig und Excel ist wieder aktiv.
Wenn aber der Anwender die Dia-Show mit ESC vorzeitig abbricht, dann bleibt Irfanview mit einem leeren Fenster offen, das dann per Mausklick geschlossen werden muß.
Kennt jemand eine Möglichkeit, Irfanview auch in diesem Fall automatisch zu beenden?
Danke für jede Antwort und Gruß
PeterG

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fremde Anwendung schließen
30.04.2006 19:06:12
Josef
Hallo Peter!
Vom Prinzip her, geht das z.B. so!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

'Dieser Source stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Idee: Elmar Leinen
'E-Mail: elmarleinen@gmx.net


Private Declare Function GetWindowThreadProcessId Lib "user32" _
  (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias _
  "FindWindowA" (ByVal lpClassName As String, ByVal _
  lpWindowName As String) As Long

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As _
  Long, ByVal wCmd As Long) As Long

Private Declare Function GetParent Lib "user32" (ByVal hwnd As _
  Long) As Long

Private Declare Function GetWindowTextLength Lib "user32" _
  Alias "GetWindowTextLengthA" (ByVal hwnd As Long) _
  As Long

Private Declare Function GetWindowText Lib "user32" Alias _
  "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString _
  As String, ByVal cch As Long) As Long

Private Declare Function SendMessage Lib "user32.dll" Alias _
  "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
  ByVal wParam As Long, lParam As Any) As Long

Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Const WM_CLOSE = &H10

Private Retval As Long


Sub open_Prog()
Dim ShellhWnd As Long
ShellhWnd = ShellTohWnd("C:\Programme\IrfanView\i_view32.exe", vbNormalNoFocus)
'Pfad zu IrfanView anpassen!

End Sub


Sub close_prog()
If Retval > 0 Then SendMessage Retval, WM_CLOSE, ByVal 0&, ByVal 0&
End Sub


Private Function ShellTohWnd(ByVal hhwPfad As String, Optional Mode _
  As VbAppWinStyle)

Dim ProcHWND As Long, ProcHWN As Long

ProcHWND = Shell(hhwPfad, Mode)

Retval = FindWindow(vbNullString, vbNullString)
Do While Retval <> 0
  If GetParent(Retval) = 0 Then
    Call GetWindowThreadProcessId(Retval, ProcHWN)
    
    If ProcHWN = ProcHWND Then
      ShellTohWnd = Retval
      Exit Do
    End If
  End If
  
  Retval = GetWindow(Retval, GW_HWNDNEXT)
Loop
End Function


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Fremde Anwendung schließen
01.05.2006 14:23:48
PeterG
Hallo Sepp,
erstmal herzlichen Dank. Ich komme gerade von einem Kurztrip zurück, daher die späte Rückmeldung. Probiert habe ich es noch nicht. Liest sich jedenfall mächtig professionell. Sollte es Probleme geben, melde ich mich nocheinmal. Nochmals danke.
PeterG
AW: Fremde Anwendung schließen
01.05.2006 19:23:18
PeterG
Hallo Sepp,
ich habe den Code jetzt getestet. Leider klappt's damit auch nicht. Irfanview bleibt nach Abbruch mit ESC weiter offen.
Es muß irgendwie zum richtigen Zeitpunkt das Makro Close_prog aufgerufen werden. Wenn ich hinter Call open_prog den Aufruf Call close_prog setze, dann wird Irfanview kurz aufgemacht und gleich wieder geschlossen.
Ich habe mir jetzt so geholfen, daß ich close_prog von Worksheet_SelectionChange aufrufen lasse. Das ist zwar nur die zweitbeste Lösung, reicht aber.
Nochmals danke und Gruß
PeterG
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige