vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Problem gelöst! 
Autor: hn273
Datum: 19.06.06 10:35

Hallo zusammen,

das Problem ließ sich mit einer Funktion lösen, die ich schon vor 2-3 Jahren mal im Netz gefunden habe. (wo genau weiß ich nicht mehr, sorry)

Die Funktion ruft per Shell einen Prozess auf, überwacht diesen dann anhand der von Shell zurückgegeben Task-ID, bis er endet. Den Rückgabewert, in meinem Falle der ErrorCode, liefert sie dann zurück.

API-Declarationen
Public Declare Function OpenProcess Lib "kernel32" ( _ 
ByVal dwDesiredAccess As Long, _  
ByVal bInheritHandle As Long,  - 
ByVal dwProcessId As Long) As Long
 
Public Declare Function GetExitCodeProcess Lib "kernel32" ( _ 
ByVal hProcess As Long,  _ 
lpExitCode As Long) As Long
 
Public Const STATUS_PENDING = &H103&
 
Public Const PROCESS_QUERY_INFORMATION = &H400
 
Public Enum ShellWindowStyle
    Hidden = 0
    NormalFocus = 1
    MinimizedFocus = 2
    MaximizedFocus = 3
    NormalNoFocus = 4
    MinimizedNoFocus = 6
End Enum
Funktion
Public Function ShellAndWait(ByVal sExeName As String,  _ 
Optional ByVal params As String, Optional TimeOutValue As Long = 0,  - 
Optional SetWindowStyle As ShellWindowStyle = vbNormalFocus) As Long
 
    Dim lInst As Long
    Dim lStart As Long
    Dim lTimeToQuit As Long
    Dim lProcessId As Long
    Dim lExitCode As Long
    Dim bPastMidnight As Boolean
 
    On Error GoTo ErrHandler
 
    lStart = CLng(Timer)
 
    'Deal with timeout being reset at Midnight
    If TimeOutValue > 0 Then
        If lStart + TimeOutValue < 86400 Then
            lTimeToQuit = lStart + TimeOutValue
        Else
            lTimeToQuit = (lStart - 86400) + TimeOutValue
            bPastMidnight = True
        End If
    End If
 
    lInst = Shell(sExeName & " " & params, SetWindowStyle)
    lProcessId = OpenProcess(PROCESS_QUERY_INFORMATION, False, lInst)
 
    Do
        GetExitCodeProcess lProcessId, lExitCode
        DoEvents
        If TimeOutValue And Timer > lTimeToQuit Then
            If bPastMidnight Then
                If Timer < lStart Then Exit Do
            Else
                Exit Do
            End If
        End If
    Loop While lExitCode = STATUS_PENDING
 
    ShellAndWait = lExitCode
 
Escape:
    Exit Function
ErrHandler:
'Fehlerbehandlung hier:
    Resume Escape
End Function
Gruß,
Waldemar
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Aufruf eines Kommandozeilenprogs aus VB, wie dessen ErrorLev...1.111hn27318.06.06 23:12
Re: Problem gelöst!1.034hn27319.06.06 10:35

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel