IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Warten auf das Ende einer gestarteten Anwendung



Warten auf das Ende einer gestarteten Anwendung

Manchmal ist es nötig auf das Ende einer per Shell() gestarteten Anwendung zu warten. Hier ein kleines Tutorial wie es funktioniert.


Autor: Dominic Schöhl (dsausk)
Datum: 04-05-2004, 22:09:10
Referenzen: keine
Schwierigkeit: Anfänger
Ansichten: 4670x
Rating: 5.33 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Zu aller erst benötigen wir einige API-Funktionen von Windows. Diese können mit dem API-Textviewer von Visual Studio schnell gefunden und kopiert werden.

Private Declare Function WaitForSingleObject Lib _
  "kernel32" (ByVal hHandle As Long, _
  ByVal dwMilliseconds As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long, _
  ByVal bInheritHandle As Long, _
  ByVal dwProcessId As Long) As Long

Zusätzlich werden noch zwei Konstanten benötigt:

Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000

Nun erstellen wir eine Sub mit der in Zukunft die Anwendung aufgerufen wird:

Public Sub WaitForApplication(ByVal Command As String, _
    Optional ByVal AppStyle As VbAppWinStyle = vbNormalFocus)

    Dim nTaskID As Long
    Dim nHandle As Long
    
    nTaskID = Shell(Command, AppStyle)
    nHandle = OpenProcess(SYNCHRONIZE, False, nTaskID)
    Call WaitForSingleObject(nHandle, INFINITE)
    Call CloseHandle(nHandle)
End Sub

Parameter:

CommandDas Programm, das ausgeführt werden soll
AppStyle [optional]Gibt an, wie das Programmfenster angezeigt werden soll

Beispiel: Startet das Programm "PING" als normal großes Fenster und setzt den Fokus darauf.

WaitForApplication "ping 127.0.0.1", vbNormalFocus

Es empfiehlt sich den Code in ein Modul zu packen, so kann man es einfach in eigene Projekte einbinden.


dreamer
Expert
Beitrag vom:
24-06-2007, 14:34:26

Könnte eigentlich ein sehr interessanter Artikel sein, nur leider wird zu wenig auf das ganze drum herum eingegangen.

Wirklich schade.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04510
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06247
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1157
Comments: 0