lcExeName = 'program.EXE'
GetProcessesActive()
SELECT * FROM ProcList WHERE UPPER(szexefile) == UPPER(m.lcExeName) TO SCREEN noconsole
IF ( _Tally > 0)
IF MESSAGEBOX( m.lcExeName + " calisiyor, gercekten katledeyim mi?",4+32+256) = 6
KillExe(m.lcExeName)
endif
endif
PROCEDURE KillExe(tcModuleName)
SELECT ProcessID FROM ProcList ;
WHERE UPPER(szexefile) == UPPER(m.tcModuleName) ;
INTO ARRAY aProcessID
IF (_Tally > 0)
declare integer OpenProcess in Win32API ;
integer dwDesiredAccess, integer bInheritHandle, integer dwProcessID
declare integer TerminateProcess in Win32API ;
integer hProcess, integer uExitCode
return TerminateProcess(OpenProcess(1, 1, aProcessID), 0) > 0
ENDIF
ENDPROC
Procedure GetProcessesActive
#Define TH32CS_SNAPPROCESS 2
#Define TH32CS_SNAPTHREAD 4
#Define TH32CS_SNAPMODULE 8
#Define MAX_PATH 260
#Define PE32_SIZE 296
Declare Integer CloseHandle In kernel32 Integer hObject
Declare Integer CreateToolhelp32Snapshot In kernel32;
INTEGER dwFlags, Integer th32ProcessID
Declare Integer Process32First In kernel32;
INTEGER hSnapshot, String @ lppe
Declare Integer Process32Next In kernel32;
INTEGER hSnapshot, String @ lppe
Declare RtlMoveMemory In WIN32API ;
INTEGER @DestNumeric, ;
STRING @pVoidSource, ;
INTEGER nLength
Create Cursor ProcList ;
(ProcessID i,;
cntThreads i,;
ParentPID i,;
szexefile m)
Local hSnapshot, lcBuffer, lSuccess
hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0)
lcBuffer = Int2Str(PE32_SIZE) + Replicate(Chr(0), PE32_SIZE-4)
lSuccess = ( Process32First(hSnapshot, @lcBuffer) # 0 )
Do While m.lSuccess
PROCESSENTRY32_ToCursor(m.lcBuffer)
lSuccess = ( Process32Next(hSnapshot, @lcBuffer) # 0 )
Enddo
CloseHandle(hSnapshot)
Function PROCESSENTRY32_ToCursor
Lparameters tcBuffer
Local szexefile
m.szexefile = Substr(m.tcBuffer,37)
m.szexefile = Substr(m.szexefile, 1, ;
AT(Chr(0),m.szexefile)-1)
Insert Into ProcList ;
(ProcessID, cntThreads, ParentPID, szexefile) ;
values ;
(Substr2Num(m.tcBuffer,9,4), ;
Substr2Num(m.tcBuffer,21,4), ;
Substr2Num(m.tcBuffer,25,4), ;
m.szexefile )
Endfunc
Function Substr2Num
Lparameters tcStr, tnStart, tnSize
Return Str2Num(Substr(m.tcStr, m.tnStart, m.tnSize), m.tnSize)
Endfunc
Function Str2Num
Lparameters tcStr,tnSize
Local m.lnValue
m.lnValue=0
RtlMoveMemory(@lnValue, m.tcStr, m.tnSize)
Return m.lnValue
Endfunc
Function Int2Str
Lparameters tnValue, tnSize
Local ix, lcReturn
m.tnSize = Iif(Empty(m.tnSize),4,m.tnSize)
lcReturn = ''
For ix=1 To m.tnSize
m.lcReturn = m.lcReturn + ;
Chr(Bitand(Bitrshift(m.tnValue, (m.ix-1)*8),0xFF))
Endfor
Return m.lcReturn
Endfunc