Rubrik: System/Windows · Prozesse/Tasks | VB-Versionen: VB4, VB5, VB6 | 16.11.04 |
Fenster, die in der Taskleiste zu sehen sind Zeigt, wie man - wenn man eine Taskleiste oder ähnliches schreiben will - an alle Fenster kommt, die in der Taskleiste angezeigt werden. Eine eigene Shell sollte somit einen kleinen Schritt näher kommen ;), natürlich könnten Sie damit auch lediglich einen Taskmanager schreiben... | ||
Autor: E7 | Bewertung: | Views: 18.808 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Sie wollen eine eigene Taskleiste oder so was ähnliches? Dann brauchen Sie die Fenster, die sich so in der Taskleiste auch tummeln... Nehmen Sie ein leeres Formular mit Listbox (List1) und Button (Command1), und fügen Sie folgenden Code ein:
Private Sub Command1_Click() List1.Clear ew_go End Sub
Folgender Code kommt in ein Modul:
Option Explicit ' Benötigte API's Private Declare Function EnumWindows Lib "user32" ( _ ByVal lpEnumFunc As Long, _ ByVal lParam As Long) As Long Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function GetParent Lib "user32" ( _ ByVal hWnd As Long) As Long Private Declare Function IsWindowVisible Lib "user32" ( _ ByVal hWnd 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 GetClassName Lib "user32" _ Alias "GetClassNameA" ( _ ByVal hWnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Private Declare Function GetWindow Lib "user32" ( _ ByVal hWnd As Long, _ ByVal wCmd As Long) As Long ' Noch ein paar Konstanten Private Const GWL_EXSTYLE = (-20) Private Const GWL_STYLE = (-16) Private Const GW_OWNER = 4 Private Const WS_EX_TOOLWINDOW = &H80& Private Const WS_EX_APPWINDOW = &H40000
' Diese Funktion initialisiert das Ganze Sub ew_go() ' Aufrufen, und ew_callback() übergeben. ' Der zweite Parameter ist egal, kann frei definiert werden EnumWindows AddressOf ew_callback, 0 End Sub
' Diese Function nimmt die Callbacks entgegen. ' param ist der zweite Parameter von EnumWindows, ' handle stellt ein enumeriertes Fenster dar Private Function ew_callback(ByVal handle As Long, ByVal param As Long) As Long ' Die Funktion ew_fenster() prüft das Fenster ew_fenster handle ' TRUE zurückgeben, um Windows zu sagen: Alles OK ' und evtl. Fehler zu vermeiden ;) ew_callback = True End Function
' Diese Funktion prüft, ob das gefundene Fenster ' in der Taskleiste angezeigt wird Private Sub ew_fenster(handle As Long) Dim i1 As Long Dim i2 As Long Dim d1 As String Dim d2 As String ' Fenster muss sichtbar sein UND darf kein Elternfenster haben If IsWindowVisible(handle) And GetParent(handle) = 0 Then ' erweiterte Optionen abrufen i1 = GetWindowLong(handle, GWL_EXSTYLE) ' nochmals Elternfenster prüfen: i2 = GetWindow(handle, GW_OWNER) ' Prüfen, ob: ' - Kein ToolWindow und kein Childfenster oder ' - Anwendungsfenster und Childfenster If ((i1 And WS_EX_TOOLWINDOW) = 0 And i2 = 0) Or _ ((i1 And WS_EX_APPWINDOW) And (i2 <> 0)) Then ' Titel / Klasse auslesen GetWindowInfo handle, d1, d2 ' und anzeigen (Handle, Titel, Klasse) ' Hier können Sie machen was Sie wollen ;) Form1.List1.AddItem handle & ": " & d1 & " (" & d2 & ")" End If End If End Sub
' Diese Funktion liest lediglich Titel und Klassenname ' eines Fensters aus und übergibt sie mittels ByRef Sub GetWindowInfo(handle As Long, p1 As String, p2 As String) ' Variablen reservieren p1 = Space(1024) p2 = Space(1024) ' Informationen holen GetWindowText handle, p1, 1024 GetClassName handle, p2, 1024 ' Nullzeichen entfernen p1 = Left(p1, InStr(1, p1, Chr(0))) p2 = Left(p2, InStr(1, p2, Chr(0))) End Sub
Mit diesem Code haben Sie nun die Möglichkeit, Ihre eigene Taskleiste zu schreiben ;)
BringWindowToTop() hilft Ihnen, angeklickte Fenster nach vorne zu holen, mittels einem der vielen TabStrip-Controls können Sie auch das optische Look&Feel erzeugen...