Code: Select all
;Process Monitor
;By GPI
;Modified by Lance Jepsen
Structure info
handle.l
process.l
class$
name$
EndStructure
Global NewList info.info()
Global 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
quit=1
ElseIf process=info()\process
If class$ < info()\class$
quit=1
ElseIf UCase(class$)=UCase(info()\class$)
If name$ < info()\name$
quit=1
ElseIf UCase(name$)=UCase(info()\name$)
If handle < info()\handle
quit=1
ElseIf handle=info()\handle
quit=3
EndIf
EndIf
EndIf
EndIf
Else
quit=2
EndIf
Until quit
If quit<3
If quit=1
If PreviousElement(info())=0: ResetList(info()) :EndIf
EndIf
AddElement(info())
info()\handle=handle
info()\process=process
info()\class$=class$
info()\name$=name$
EndIf
EndProcedure
Procedure TerminateProcess(processid)
process=OpenProcess_(#PROCESS_ALL_ACCESS,1,processid)
If process
TerminateProcess_(process,0)
CloseHandle_(process)
EndIf
EndProcedure
Procedure RefreshList()
ClearGadgetItems(0)
ClearList(allhandle())
ClearList(info())
handle=GetWindow_(WindowID(0),#GW_HWNDFIRST)
ClearList(allhandle())
quit=0
Repeat
AddInfo(handle)
x=GetWindow_(handle,#GW_CHILD)
If x
AddElement(allhandle())
allhandle()=x
EndIf
x=GetWindow_(handle,#GW_HWNDNEXT)
If x
handle=x
Else
If LastElement(allhandle())
handle=allhandle()
DeleteElement(allhandle())
Else
quit=1
EndIf
EndIf
Until quit
ResetList(info())
While NextElement(info())
If oldprocess<>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,100,50,612,450,"Process Monitor",#PB_Window_SystemMenu)
ListIconGadget(0, 30,125,550,300, "Process",70)
AddGadgetColumn(0,1,"Class",210)
AddGadgetColumn(0,2,"Name",250)
AddGadgetColumn(0,3,"Handle",80)
ButtonGadget(3, 256,30, 128,22,"Post Message")
FrameGadget(2,252, 26,136,30,"",#PB_Frame_Single)
FrameGadget(6,20, 70,570,370,"Windows")
ButtonGadget(4, 395,90, 128,20,"Refresh List")
TextGadget(5,90,8,60, 20, "Message")
ComboBoxGadget(309, 30, 30, 200, 25)
AddGadgetItem(309,0,"*Select*")
AddGadgetItem(309,-1,"WM_DESTROY")
AddGadgetItem(309,-1,"WM_CLOSE")
AddGadgetItem(309,-1,"WM_QUIT")
SetGadgetState(309,0)
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 EventGadget()
Case 3;Post Message
If GetGadgetText(309)="WM_CLOSE"
PostMessage_(info()\handle,#WM_CLOSE,0,0)
EndIf
If GetGadgetText(309)="WM_DESTROY"
PostMessage_(info()\handle,#WM_DESTROY,0,0)
EndIf
If GetGadgetText(309)="WM_QUIT"
PostMessage_(info()\handle,#WM_QUIT,0,0)
EndIf
Case 4
RefreshList()
EndSelect
EndSelect
Until event=#PB_Event_CloseWindow
EndIf