Page 1 of 1

List all Windows

Posted: Thu Apr 10, 2003 7:48 pm
by BackupUser
Restored from previous forum. Originally posted by GPI.

Code: Select all

;-ini
Structure info
  handle.l
  process.l
  class$
  name$
EndStructure
#PROCESS_ALL_ACCESS=$FFF

NewList info.info()
NewList AllHandle()

Procedure.s GetClassName(handle)
  class$=Space(1024)
  GetClassName_(handle,@class$,Len(class$))
  ProcedureReturn Left(class$,Len(class$))
EndProcedure
Procedure.s GetTitle(handle)
  name$=Space(1024)
  GetWindowText_(handle,@name$,Len(name$))
  ProcedureReturn Left(name$,Len(name$))
EndProcedure
Procedure AddInfo(Handle)
  process=0
  GetWindowThreadProcessId_(handle,@process)
  Class$=GetClassName(handle)
  Name$=GetTitle(handle)
  
  ResetList(info())
  quit=0
  i=0
  Repeat
    If NextElement(info())
      If process info()\process
      oldprocess=info()\process
      a$=Hex(oldprocess)
    Else 
      a$="              ''"
    EndIf
    AddGadgetItem(0,-1,a$+Chr(10)+info()\class$+Chr(10)+info()\name$+Chr(10)+Hex(info()\handle))

  Wend
  
  SetGadgetState(0,0)
EndProcedure

If OpenWindow(0,0,400,512,320,#PB_Window_SystemMenu,"Tasks")
  

  If CreateGadgetList(WindowID())
    ListIconGadget(0, 0,0,512,300, "Process",60)
    AddGadgetColumn(0,1,"Class",220)
    AddGadgetColumn(0,2,"Name",150)
    AddGadgetColumn(0,3,"Handle",50)
    ButtonGadget(1,   0,300, 128,20,"Send Quit")
    ButtonGadget(2, 128,300, 128,20,"Send Close")
    ButtonGadget(3, 256,300, 128,20,"Terminate Process")
    ButtonGadget(4, 384,300, 128,20,"Refresh List")
    
    RefreshList()
    
    Repeat
      event=WaitWindowEvent()
      Select event
        Case #pb_event_gadget
          stat=GetGadgetState(0)
          If stat>-1
            SelectElement(info(),stat)
            stat=1
          Else
            stat=0
          EndIf

          Select EventGadgetID()
;             Case 0:
;               If stat
;                 Debug Hex(info()\process)+" | "+info()\class$+" | "+info()\name$+" | "+Hex(info()\handle)
;               EndIf
             Case 1;quit
               If stat: postmessage_(info()\handle,#wm_quit,0,0):EndIf
             Case 2;close
               If stat: postmessage_(info()\handle,#wm_close,0,0):EndIf
             Case 3;Terminate
               If stat: TerminateProcess(info()\process) :EndIf
             Case 4
               RefreshList()
          EndSelect
      EndSelect
          
    Until event=#pb_event_Closewindow
  EndIf
EndIf

GPI

PII 333, 256MB, Asus TNT2Ultra 32MB, AWE Gold 64 4MB