vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 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

Visual-Basic Einsteiger
Re: 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
 
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
ist anwendung aktiv ?55Ray14.08.01 10:42
Re: ist anwendung aktiv ?39Larsen14.08.01 12:52
Re: ist anwendung aktiv ?34Ray15.08.01 00:34
Re: ist anwendung aktiv ?38Larsen14.08.01 12:52
Re: ist anwendung aktiv ?44Tolwyn14.08.01 15:01

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