Wie kann man eine Liste der sichtbaren Fenster bekommen?

Anfängerfragen zum Programmieren mit PureBasic.
OscarWilde
Beiträge: 1
Registriert: 07.07.2008 23:04
Wohnort: CGN
Kontaktdaten:

Wie kann man eine Liste der sichtbaren Fenster bekommen?

Beitrag 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
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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.
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten