| |

Visual-Basic EinsteigerRe: ist anwendung aktiv ? | |  | Autor: Tolwyn | Datum: 14.08.01 15:01 |
| Die richtig gute Lösung hab ich auch nicht, aber wenn Du zumindest den namen des Windows hast, das die Anwendung verwendet hilft Dir das vielleicht weiter. Einfach den gesamten Code in ein Modul einfügen, Explorer starten und die Funktion Test1 aufrufen. Dann bekommst du, gesagt ob der Explorer läuft, die Prozess ID vom Explorer und dessen kompletten Namen. (Auch VBAnwendungen ohne eine Benutzeroberfläche haben für gewöhnlich ein Window!)
Leider konnte ich diesen Code jetzt nicht unter Win95/98/ME Testen, aber unter NT läuft er. Kannst es ja einfach mal testen.
re Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount 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 IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
' Private Variablen für den Ablauf
Private mhWnd As Long
Private mMethod As FindWindowOtions
Private mbCaseSens As Boolean
Private mbVisible As Boolean
Private msAppTitle As String
' Optionen
Public Enum FindWindowOtions
StartsWith = 0 ' Name fängt mit dem String an
Contains = 1 ' Name enthällt den übergebenen String
Matches = 2 ' Name muss genau gleich sein
End Enum
Public Function Test1()
Debug.Print AppRunning("Explorer", StartsWith, False)
Debug.Print GetProcessID("Explorer", StartsWith, False)
Debug.Print GetWindowFullName("Explorer", StartsWith, False)
End Function
Public Function AppRunning(sName As String, lOP As FindWindowOtions, Optional bCaseSensitive As Boolean = False) As Boolean
Dim lRet As Long
Dim sTitle As String
Dim sTemp As String
' Private Variablen versorgen
mMethod = lOP
mbCaseSens = bCaseSensitive
msAppTitle = sName
mhWnd = 0
If mbCaseSens = False Then
msAppTitle = UCase$(msAppTitle)
End If
lRet = GetWindowHwd()
If lRet Then
AppRunning = True
Else
AppRunning = False
End If
End Function
Public Function GetWindowFullName(sName As String, lOP As FindWindowOtions, Optional bCaseSensitive As Boolean = False) As String
Dim lRet As Long
Dim sTitle As String
' Private Variablen versorgen
mMethod = lOP
mbCaseSens = bCaseSensitive
msAppTitle = msAppTitle
mhWnd = 0
If mbCaseSens Then
msAppTitle = UCase$(msAppTitle)
End If
lRet = GetWindowHwd()
If lRet Then
sTitle = Space$(256)
lRet = GetWindowText(lRet, sTitle, Len(sTitle))
Else
sTitle = ""
End If
GetWindowFullName = sTitle
End Function
Public Function GetProcessID(sName As String, lOP As FindWindowOtions, Optional bCaseSensitive As Boolean = False) As String
Dim lRet As Long
Dim lProcessID As Long
' Private Variablen versorgen
mMethod = lOP
mbCaseSens = bCaseSensitive
msAppTitle = msAppTitle
mhWnd = 0
If mbCaseSens Then
msAppTitle = UCase$(msAppTitle)
End If
' Handle holen
lRet = GetWindowHwd()
If lRet Then
GetWindowThreadProcessId lRet, lProcessID
Else
lProcessID = 0
End If
GetProcessID = lProcessID
End Function
Private Function GetWindowHwd() As Long
' Das Handle zu dem übergebenen Namen suchen (wenn vorhanden)
Call EnumWindows(AddressOf EnumWindowsProc, 0)
If mhWnd > 0 Then
GetWindowHwd = mhWnd
End If
End Function
Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Static WindowText As String
Static lRet As Long
' Sichtbarkeit erzwingen, wenn gewünscht
If lParam Then
If IsWindowVisible(hwnd) = False Then
EnumWindowsProc = True
End If
End If
WindowText = Space$(256)
lRet = GetWindowText(hwnd, WindowText, Len(WindowText))
If lRet Then
' Aktuelles Window vergleichen
WindowText = Left$(WindowText, lRet)
If mbCaseSens = False Then
WindowText = UCase$(WindowText)
End If
Select Case mMethod
Case StartsWith
If InStr(WindowText, msAppTitle) = 1 Then
mhWnd = hwnd
End If
Case Contains
If InStr(WindowText, msAppTitle) <> 0 Then
mhWnd = hwnd
End If
Case Matches
If WindowText = msAppTitle Then
mhWnd = hwnd
End If
End Select
End If
' True zurückgeben um enumeration fortzusetzten ansonsten Handle zurück
EnumWindowsProc = (mhWnd = 0)
End Function
|  |
 | 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 |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|
|
|
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
|
|