Display a Task List
Posted: Sun Aug 23, 2015 9:39 am
Here is a program that displays all running tasks.
Right click on a task to kill that task.
Right click on a task to kill that task.
Code: Select all
#INCLUDE "dcdialog.CH"
FUNCTION Main()
LOCAL GetList[0], aTasks, i, oBrowse, aHeader, GetOptions, oMenu, aWidths
RunShell('/C TaskList.Exe /V /FO CSV > tasklist.csv')
aTasks := DC_Csv2Array('tasklist.csv')
IF Empty(aTasks)
DCMSGBOX 'Could not create TASKLIST.CSV'
ENDIF
aHeader := aTasks[1]
aWidths := Array(Len(aTasks[1]))
AFill(aWidths,10)
aWidths[1] := 25
aWidths[2] := 5
aWidths[3] := 5
aWidths[4] := 6
aWidths[9] := 40
ARemove( aTasks,1 )
ASort(aTasks,,,{|a,b|a[1]<b[1]})
@ 0,0 DCPUSHBUTTON CAPTION 'Refresh Task List' SIZE 15 ;
ACTION {||RefreshTasks(oBrowse,@aTasks)}
@ 1,0 DCBROWSE oBrowse SIZE 30,25 FIT ;
DATA aTasks ;
RBSELECT ;
RESIZE DCGUI_RESIZE_RESIZEONLY ;
FONT '9.Lucida Console'
FOR i := 1 TO Len(aHeader)
DCBROWSECOL ELEMENT i HEADER aHeader[i] PARENT oBrowse ;
EVAL {|o|o:dataArea:rbdown := {|x,y,z|oMenu:popup( z, x, 2 , ;
XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN ) }} ;
SORT SortBlock(aTasks,i) ;
WIDTH aWidths[i]
NEXT
DCSUBMENU oMenu PROMPT 'Options'
DCMENUITEM 'Kill Task' PARENT oMenu ;
ACTION {||KillTask(oBrowse,@aTasks,aHeader) }
DCGETOPTIONS RESIZE
DCREAD GUI FIT TITLE 'Browsing Task List' SETAPPWINDOW OPTIONS GetOptions
RETURN nil
PROC appsys ; RETURN
* ---------
STATIC FUNCTION SortBlock( aTasks, i )
RETURN {||ASort(aTasks,,,{|a,b|a[i]<b[i]})}
* ---------
STATIC FUNCTION KillTask( oBrowse, aTasks, aHeader )
LOCAL aTask := aTasks[oBrowse:arrayElement], i, aMsg, lStatus
aMsg := { 'Kill Task:', '' }
FOR i := 1 TO Len(aHeader)
AAdd(aMsg,PadL(aHeader[i],15) + ': ' + aTask[i])
NEXT
lStatus := DC_MsgBox(,,aMsg,,,,.t.,2,,,,,'12.Lucida Console')
IF lStatus
RunShell('/PID ' + aTask[2],'C:\windows\system32\TaskKill.Exe',.t.,.f.)
Sleep(100)
RefreshTasks( oBrowse, @aTasks )
ENDIF
RETURN lStatus
* ----------
STATIC FUNCTION RefreshTasks( oBrowse, aTasks )
RunShell('/C TaskList.Exe /V /FO CSV > tasklist.csv')
aTasks := DC_Csv2Array('tasklist.csv')
ARemove( aTasks,1 )
ASort(aTasks,,,{|a,b|a[1]<b[1]})
oBrowse:dataSource := aTasks
oBrowse:goTop()
oBrowse:forceStable()
oBrowse:refreshAll()
RETURN nil