vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: System/Windows · Prozesse/Tasks   |   VB-Versionen: VB4, VB5, VB616.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:   E7Bewertung:     [ Jetzt bewerten ]Views:  18.792 
ohne HomepageSystem:  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...
 

Dieser Tipp wurde bereits 18.792 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 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