vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Fenster15.03.02
EnumThreadWindows-Funktion

Diese Funktion ermittelt alle Fenster die dem selben Thread-ID zugewiesen sind und gibt deren Fensterhandle zurück.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  10.254 

Deklaration:

Declare Function EnumThreadWindows Lib "user32.dll" ( _
  ByVal dwThreadId As Long, _
   ByVal lpfn As Long, _
  ByVal lParam As Long) As Long


Beschreibung:

Diese Funktion ermittelt alle Fenster die dem selben Thread-ID zugewiesen sind und gibt deren Fensterhandle zurück.

Parameter:
dwThreadIdErwartet einen Thread-ID mit dem alleFenster ermittelt werden, die von diesem Thread ausgehen.
lpfnErwartet die Adresse einer Funktion, die bei jedem ermitteltem Fenster aufgerufen wird und diedem Fensterhandle des gefundenen Fensters übergeben wird.
lParamErwartet einen zusätzlichenWert, der der Funktion, die aufgerufen wird, zusätzlich übergeben werden soll. lParam beinhaltet diesenWert, sobald die Enum-Funktion aufgerufen wird.


Rückgabewert:
Ist die Funktion erfolgreich, so ist ein Wert "ungleich 0" die Rückgabe, andernfalls wird "0" zurückgegeben. Für erweiterte Fehlerinformationen rufenSie die GetLastError-Funktion auf.


Beispiel:

' Schreiben sie den nachfolgenden Code in ein öffentliches Modul
Private Declare Function EnumWindows Lib "user32.dll" ( _
  ByVal lpEnumFunc As Long, _
   ByVal lParam As Long) As Long
Private Declare Function EnumThreadWindows Lib "user32.dll" ( _
  ByVal dwThreadId As Long, _
  ByVal lpfn As Long, _
  ByVal lParam As Long) As Long
Private Declare Function EnumChildWindows Lib "user32.dll" ( _
  ByVal hWndParent As Long, _
  ByVal lpEnumFunc As Long, _
  ByVal lParam As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _
  ByVal hwnd As Long, _
  lpdwProcessId As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" _
  Alias "GetWindowTextLengthA" ( _
  ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" _
  Alias "GetWindowTextA"  ( _
  ByVal hwnd As Long, _
  ByVal lpString As String, _
  ByVal nMaxCount As Long) As Long
Private Declare Function GetClassName Lib "user32.dll" _
  Alias "GetClassNameA" ( _
  ByVal hwnd As Long, _
  ByVal lpClassName As String, _
  ByVal nMaxCount As Long) As Long
 
Public Enum WindowEnum
  HAUPTFENSTER = 0
  THREADFENSTER = 1
  KINDFENSTER = 2
End Enum
' Ereignis der Enum-Funktion landet hier
Public Function EnumProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
  Dim Retval As Long, WindowText As String, WindowClass As String
  On Error GoTo ToLargeWindowText
 
  ' Fenstertext ermitteln
  WindowText = Space(GetWindowTextLength(hwnd) + 1)
  Retval = GetWindowText(hwnd, WindowText, Len(WindowText))
  WindowText = Left$(WindowText, Retval)
 
  ' Fensterklasse ermitteln
  WindowClass = Space(256)
  Retval = GetClassName(hwnd, WindowClass, Len(WindowClass))
  WindowClass = Left$(WindowClass, Retval)
 
  ' ermittelte Daten der entsprechenden Listbox hinzufügen
  With Form1.List1(lParam)
    .AddItem CStr(hwnd) & " # " & WindowClass & " # " & WindowText
    .ItemData(.NewIndex) = hwnd
  End With
 
  ' Wert für die weitere Enumerierung zurückgeben
  EnumProc = 1
  Exit Function
 
' Wenn der Fenstertext länger als der maximal verfügbare Puffer ist
  WindowText = Space(256)
  Resume Next
End Function
' Starten der ausgewählten Enumeration
Public Function EnumAllWindows(ByVal WindowType As WindowEnum, Optional  _
ParentWindow As Long = 0&)
  Dim ThreadID As Long, ProcessID As Long
 
  Select Case WindowType
  Case HAUPTFENSTER ' Hauptfenster enumerieren
    EnumWindows AddressOf EnumProc, WindowType
  Case THREADFENSTER ' Threadfenster enumerieren
    If ParentWindow = 0 Then Exit Function
    ' Thread-ID ermitteln und Enumeration starten
    ThreadID = GetWindowThreadProcessId(ParentWindow, ProcessID)
    EnumThreadWindows ThreadID, AddressOf EnumProc, WindowType
  Case KINDFENSTER ' Kindfenster enumerieren
    If ParentWindow = 0 Then Exit Function
    EnumChildWindows ParentWindow, AddressOf EnumProc, WindowType
  End Select
End Function
 
 
' Schreiben Sie den nachfolgenden Code in ein Fenster das 3 Listboxen 
'  (List1 mit Index 0-2) hat
Private Declare Function IsWindowEnabled Lib "user32.dll" (ByVal hwnd As Long) As Long 
Private Declare Function EnableWindow Lib "user32.dll" ( _
  ByVal hwnd As Long, _
  ByVal fEnable As Long) As Long
' Starten der Enumeration und Übertragen aller gefundenen Fenster in die Listbox
Private Sub Form_Load()
  List1(0).Clear
  EnumAllWindows HAUPTFENSTER
  List1(0).ListIndex = 0
End Sub
' Beim Wählen eines Fensters Kind- und Thread-Fenster enumerieren
Private Sub List1_Click(Index As Integer)
  Select Case Index
  Case 0
    List1(1).Clear
    List1(2).Clear
    EnumAllWindows THREADFENSTER, List1(0).ItemData(List1(0).ListIndex)
    EnumAllWindows KINDFENSTER, List1(0).ItemData(List1(0).ListIndex)
  End Select
End Sub
' Beim Doppelklick Fenster disablen wenn es enabled ist oder umgekehrt
Private Sub List1_DblClick(Index As Integer)
  If IsWindowEnabled(List1(Index).ItemData(List1(Index).ListIndex)) = 0 Then
    EnableWindow List1(Index).ItemData(List1(Index).ListIndex), 1
  Else
    EnableWindow List1(Index).ItemData(List1(Index).ListIndex), 0
  End If
End Sub

Diese Seite wurde bereits 10.254 mal aufgerufen.

nach obenzurück
 
   

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