002
06.03.2005, 13:21 Uhr
Audron-AT-www
http://www.sXene.de Audron@sxene.de (Operator)
|
Und weil ich heute noch so nett bin... Zeig ich dir auch mal, wie man alle laufenden Programm und ihre Task-ID ermitteln kann.
Alles, was Sie zum Ausprobieren benötigen, ist eine Form, ein ListView-Control, ein CommandButton und ein Modul.
Beim Klicken auf den CommandButton wird die Windows Fensterliste durchlaufen und alle gefundenen Programme im ListView sauber angezeigt, natürlich mit Fenstertitel, TaskID und Fenster-Handle.
Visual Basic: |
' Fensterliste ermitteln und anzeigen Private Sub Command1_Click() GetWindowList ListView End Sub
|
Sollen alle Fenster ermittelt werden, also auch diejenigen, die nicht direkt sichtbar sind, einfach im GetWindowList-Aufruf als zweiten Parameter False angeben.
Folgenden Code bitte in das Modul einfügen:
Visual Basic: |
Option D = lTemp End Function
Private Function GetWindowTitle(ByVal hWnd As Long) _ As String ' Ermittelt den Namen eines Windows anhand des ' Window Handle Dim lResult As Long Dim sTemp As String lResult = GetWindowTextLength(hWnd) + 1 sTemp = Space(lResult) lResult = GetWindowText(hWnd, sTemp, lResult) GetWindowTitle = Left(sTemp, Len(sTemp) - 1) End Function
|
Und wenn Sie nun lediglich prüfen wollen, ob z.B. WinWord gestartet ist, können Sie dies folgendermassen tun:
Visual Basic: |
Public Function WordIsRunning(oForm As Form) As Boolean ' Gibt True zurück, wenn Word geladen ist Dim hWnd As Long Dim sTitle As String Dim lStyle As Long WordIsRunning = False ' Ich alter Pessimist ;-)
' Erstes WindowHandle holen hWnd = GetWindow(oForm.hWnd, GW_HWNDFIRST) Do ' Handle auswerten lStyle = GetWindowLong(hWnd, GWL_STYLE) lStyle = lStyle And (WS_VISIBLE Or WS_BORDER) If (lStyle = (WS_VISIBLE Or WS_BORDER)) = True Then ' Titelzeile ermitteln und prüfen, ob ' das "Microsoft Word" darin enthalten ist sTitle = GetWindowTitle(hWnd) If InStr(1, sTitle, "Microsoft Word", _ vbTextCompare) > 0 Then WordIsRunning = True Exit Do End If End If ' Nächses Handle hWnd = GetWindow(hWnd, GW_HWNDNEXT) Loop Until hWnd = 0 End Function
|
-- Mit freundlichen Grüßen Audron, audron@sxene.de
|