Alle offenen Fenster mit Titel, Handle, Klasse...auflisten

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Olaf hat geschrieben:@ts-soft: Hab ich bei EnumChildWindows was neu gemacht??? Also ich glaub nicht.
Der Post bezieht sich ja nur auf den Static-Protected-Konflikt :lol:
(Ich würd den Code so nie verwenden -> Protected :lol: )
ts-soft hat geschrieben:Hier mal sowas ähnliches für die Kinderchen :wink:

Code: Alles auswählen

Procedure EnumChildProc(hwnd.l, *lParam.long)
  Protected title.s{1024}
  Protected class.s{1024}
  *lParam\l + 1
  GetWindowText_(hWnd,@title,1024) ;Fenstertitel auslesen
  GetClassName_(hWnd,@class,1024)  ;Fensterklasse auslesen
  Debug "[Title]= " + title + " [hWnd]= " + Str(hWnd) + " [ClassName]= " + class;Werte ausgeben
  ProcedureReturn #True
EndProcedure

Procedure EnumChildWindows(hWnd.l, WindowTitel.s = "")
  If WindowTitel <> ""
    hWnd = FindWindow_(0, @WindowTitel)
  EndIf
  If hWnd = 0
    ProcedureReturn 0
  EndIf
  Protected Anzahl.l
  EnumChildWindows_(hWnd, @EnumChildProc(), @Anzahl)
  ProcedureReturn Anzahl
EndProcedure

Debug EnumChildWindows(0, "PureBasic")
Das Ergebnis ist die Anzahl der Childfenster
Parameter sind entweder hWnd oder Fenstertitel
PID hab ich mir gespart, ist immer dieselbe :mrgreen:

Gruß
Thomas
Ursprünglich gings es bei Dir um EnumWindows
Ich habe es ergänzt um EnumChildWindows
Deshalb meine Frage

Protected oder Static sollte immer in einer Procedure verwendet werden,
ansonsten kann man den Code nicht gefahrlos in andere Codes einfügen!
Dieselbe Variable könnte ja bereits Global existieren, mit anderen Werten
oder Typ, was dann mit größer Wahrscheinlichkeit zu Fehlern führt!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag von Olaf »

@ts-soft: Das mit den ChildWindows hab ich ja nur als Ergänzung auch in meinen Code eingebaut, damit der Code mal zusammenhängend
dasteht und man sich nicht alles zusammenbasteln muss (ParentWindows aus meinem Beitrag und ChildWindows aus deinem).
Des Weiteren war der Code von vorhin ja nicht wirklich ernst gemeint. Als fertigen Code würde ich die Version inkl.
ChildWindows un mit Deklarierung Protected ansehen.
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

So, jetzt endlich, nachdem sich das schei* Forum wieder eingekriegt hat und läuft:

Eigentlicher Beitrag:

@ Olaf: lol, gute Idee :lol:

@ TS-Soft: Das habe ich mir schon gedacht, dass der Speicher nicht erneut reserverit werden muss. Vielleicht ist es ja auch PureBlödsinn, aber braucht das überschreiben des Speicherbereichs nicht mind. genauso viel Zeit? Nur so'n Gedanke.


Ansonsten stimme ich dir zu, dass es meistens keinen Unterschied zw. Protected und Static gibt, z. B. wegen des EventLoops. Aber einen Unterschied gibt's schon: Protected-Variablen werden am Ende der Prozedur gelöscht, habe ich hier irgendwo im Forum gelesen. Spart also noch nen bissl Speicher, besonders, wenn eine Prozedur 1-2 Mal aufgerufen wird, dann nie wieder. :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten