1 1 1 1 1 1 1 1 1 1 Rating 4.40 (5 Votes)

Problemstellung:

Wie kann ich mit Access prüfen, ob ein bestimmtes Programm bereits läuft?
Lösung mittels API Funktionen

Private Declare Function CreateToolhelpSnapshot Lib _
                          "Kernel32" Alias "CreateToolhelp32Snapshot" ( _
                          ByVal lFlgas As Long, ByVal lProcessID As Long) As Long
 
Private Declare Function ProcessFirst Lib "Kernel32" _
                          Alias "Process32First" (ByVal hSnapshot As Long, _
                          uProcess As PROCESSENTRY32) As Long
 
Private Declare Function ProcessNext Lib "Kernel32" _
                          Alias "Process32Next" (ByVal hSnapshot As Long, _
                          uProcess As PROCESSENTRY32) As Long
 
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
 
Private Const TH32CS_SNAPPROCESS As Long = 2&
 Private Const MAX_PATH As Long = 260
 
Private Type PROCESSENTRY32
     dwSize As Long
     cntUsage As Long
     th32ProcessID As Long
     th32DefaultHeapID As Long
     th32ModuleID As Long
     cntThreads As Long
     th32ParentProcessID As Long
     pcPriClassBase As Long
     dwflags As Long
     szexeFile As String * MAX_PATH
 End Type
 
' Prüft, ob eine EXE-Datei bereits ausgeführt wird
 Private Function IsEXERunning(ByVal sFilename As String) As Long
 
    Dim lSnapshot As Long
     Dim uProcess As PROCESSENTRY32
     Dim nResult As Long
 
    ' "Snapshot" des aktuellen Prozess ermitteln
     lSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
     If lSnapshot <> 0 Then
         uProcess.dwSize = Len(uProcess)
 
        ' Ersten Prozess ermitteln
         nResult = ProcessFirst(lSnapshot, uProcess)
 
        Do Until nResult = 0
             ' Prozessliste durchlaufen
             If InStr(LCase$(uProcess.szexeFile), LCase$(sFilename)) > 0 Then
                 ' Jepp - EXE gefunden
                 IsEXERunning = True
                 Exit Do
             End If
 
            ' nächster Prozess
             nResult = ProcessNext(lSnapshot, uProcess)
         Loop
 
        ' Handle schliessen
         CloseHandle lSnapshot
     End If
End Function

Aufruf:

Dim AppRun As Boolean
 If IsEXERunning("winword.exe") Then AppRun = True 'z.B. WinWord 

Die Variable "AppRun" würde den Wert True annehmen wenn Word bereits läuft.

Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Gibt es eine Möglichkeit SQL-Code einer Abfrage so zu konvertieren das der Code in VBA genutzt werden kann? Lösung: Bis Access 2010 gibt das Tool "SmartTools SQL aus Abfragen 3.0"...
1.png2.png1.png2.png7.png5.png5.png
Heute55
Gestern105
Diese Woche263
Dieser Monat1555
Total1212755

  • IP: 52.55.177.115
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

3
Online

19. Dezember 2018

Letzte Kommentare

  • Trusted Locations Manager

    Tommy Admin 13.07.2018 13:06
    RE: Trusted Locations Manager
    Hallo Matthias, aus Ermangelung einer 64bit Version kann ich das leider nicht prüfen. Tut mir leid. Gruss ...

    Weiterlesen...

     
  • Trusted Locations Manager

    Matthias 13.07.2018 06:48
    Funktioniert nicht
    Habe gerade den TL-Manager installiert. Nach dem Start sagt er mir, dass es kein Office erkennen ...

    Weiterlesen...