Seite 1 von 1

Anzahl aller Child-windows eines Fensters auflisten...

Verfasst: 15.03.2007 22:06
von onny
HI, soweit hab ich mein Problem gelößt, aber ziemlich unelegant.

Code: Alles auswählen

Procedure ListChildWindows (window, parameter) 

    *memory = ReAllocateMemory(*memory, 255)
    GetClassName_ (window, *memory, 255) 
    class$ = PeekS (*memory) : FreeMemory (0)

    SetGadgetText(1 , Str(Val(GetGadgetText(1))+1))
    
    EnumChildWindows_ (window, @ListChildWindows (), 0) 
    
    ProcedureReturn #True 
    
EndProcedure 

Procedure ListWindows (window, parameter) 

    *memory = ReAllocateMemory(*memory, 255)
    GetWindowText_ (window, *memory, 255) 
    title$ = PeekS (*memory) 

    If title$ = "VLC media player"
    EnumChildWindows_ (window, @ListChildWindows (), 1)
    EndIf

    FreeMemory (0) 

    ProcedureReturn #True 
    
EndProcedure 





OpenWindow(0,x,y,110,30,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Nummer")
CreateGadgetList(WindowID())
StringGadget(1,5,5,100,20,"")
EnumWindows_ (@ListWindows (), 0)

Repeat

EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
Schöner wäre es mit

Code: Alles auswählen

debug AnzahlChildWindows("Mein Fenster")
Aber wie? :cry: :cry: :cry: :cry: :cry:
Ich hab versucht und versucht aber ich blick nicht durch und schaffs nicht... Bitte um Hilfe, danke!

Verfasst: 15.03.2007 22:28
von ts-soft
Das mit dem Fenstertitel ist nicht unbedingt Sicher, aber wenns Dir reicht:

Code: Alles auswählen

Procedure EnumChildProc(hwnd.l, *lParam.long)
  *lParam\l + 1
  ProcedureReturn #True
EndProcedure

Procedure AnzahlChildWindows(WindowTitel.s)
  Protected hWnd = FindWindow_(0, @WindowTitel)
  Protected Anzahl.l
  EnumChildWindows_(hWnd, @EnumChildProc(), @Anzahl)
  ProcedureReturn Anzahl
EndProcedure

Debug AnzahlChildWindows("PureBasic")

Verfasst: 15.03.2007 22:47
von onny
wow danke, cleverer code. doch irgendwie kommt im vergleich zu meinem code bei dir weniger /:->

Verfasst: 15.03.2007 22:56
von ts-soft
onny hat geschrieben:wow danke, cleverer code. doch irgendwie kommt im vergleich zu meinem code bei dir weniger /:->
Kann Deinen Code nicht testen, selbst nach Änderung auf PB4 kommt nur invalide Memory. Wie testest Du denn mit Deinem Code? und warum geht der bei Dir :freak:

Die Anzahl der Childs sollte eigentlich korrekt sein.

// Nachtrag:
Hab obigen Code nochmal verbessert, da bei nicht finden des Fensters anhand des Titels, irgendwas anderes gezählt wurde :mrgreen:

Code: Alles auswählen

Procedure EnumChildProc(hwnd.l, *lParam.long)
  *lParam\l + 1
  ProcedureReturn #True
EndProcedure

Procedure AnzahlChildWindows(WindowTitel.s)
  Protected hWnd = FindWindow_(0, @WindowTitel)
  Protected Anzahl.l
  If hWnd
    EnumChildWindows_(hWnd, @EnumChildProc(), @Anzahl)
  Else
    Debug "Fenster wurde nicht gefunden"
    ProcedureReturn 0
  EndIf
  ProcedureReturn Anzahl
EndProcedure

Debug AnzahlChildWindows("PureBasic")

Verfasst: 16.03.2007 07:56
von onny
danke :)
ich habe meinen code aus dem listchildwindows.pb example gebastelt... aus dem code archiv /:->