Seite 1 von 1

Wie kann man eine Liste der sichtbaren Fenster bekommen?

Verfasst: 08.07.2008 10:31
von OscarWilde
Hallo zusammen,

wie kann ich eine Liste der sichbaren Fenster bekommen? Ich weiß noch nicht wie ich an die Handles rankomme, kann mir jemand mal einen Einstieg geben vielleicht mit einem kurzen Schnipsel Quellcode?

Das wäre super! :allright:

Danke,

Frank

Verfasst: 08.07.2008 10:42
von Franky
Hi Oscar.

Eine Liste der Fenster bekommst du über EnumWindows_()
Als Procedure, die du EnumWindows übergibst, eignet sich z.b.:

Code: Alles auswählen

Global NewList Fenster.l()
Procedure NeuesFenster(adr,wert)
        AddElement(Fenster())
          Fenster()=adr
        procedurereturn adr
EndProcedure
(is jetzt ungetestet, aber vom prinzip her klappts ;)

Danach brauchste nur noch die Liste durchgehen und für jedes Fenster fragen IsWindowVisible_().

Allerdings bekommst du dann auch das Fenster, auf dem sich die DesktopIcons befinden ("ProgramManager" heißt das) und die Taskleiste.

Verfasst: 08.07.2008 12:11
von RSBasic

Code: Alles auswählen

Procedure ListWindows(hwnd,Param)
  If GetWindowLong_(hwnd,#GWL_EXSTYLE) ! #WS_EX_TOOLWINDOW And GetWindowLong_(hwnd,#GWL_STYLE) & #WS_VISIBLE
   String$ = Space(250)
   GetWindowText_(hwnd,String$,250)
   If Not String$=""
     AddGadgetItem(1,-1,String$,0,0)
   EndIf
  EndIf
  ProcedureReturn #True
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
   ListViewGadget(1,10,10,480,230,0)
  EndIf
  EnumChildWindows_(FindWindow_("ToolbarWindow32",0),@ListWindows(),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf