robsuttonjr
MIS
** The following program will take a snapshot of current processes running and insert into a cursor called 'Cprocces_info'. Also includes other helpful info about processes for use with other functions I have not added on yet. I am using it to disallow running of additional instances of a program called xxxx*.exe I could not find a program that would do this.
** Program: gets processes running on system
#DEFINE TH32CS_SNAPPROCESS 0x00000002
LOCAL lcProcessName, lnBufSize, lcProcInfo, lnResult, lnProcID, th32DefaultHeapID
LOCAL cntUsage, th32ProcessID, th32ModuleID, cntThreads, th32ParentProcessID, pcPriClassBase, dwFlags, szExeFile
CREATE CURSOR Cprocess_info(szExeFile C(50),cntUsage INT, th32ProcessID INT, th32DefaultHeapID INT,;
th32ModuleID INT, cntThreads INT, th32ParentProcessId INT, pcPriClassBase INT, ;
dwFlags INT)
&& Declare DLLs needed for the case
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 INTEGER CloseHandle IN kernel32 INTEGER hObject
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
lnBufSize = 550
lcProcInfo = Num2DWORD(lnBufSize) + REPLICATE(CHR(0), lnBufSize -32)
** ITERATE THROUGH PROCESSES AND INSERT INTO PROCESS INFO CURSOR
lnResult = Process32First(hSnapShot, @lcProcInfo)
*lnProcID = 0
DO WHILE lnResult # 0
m.cntUsage = Buf2DWORD(SUBSTR(lcProcInfo, 5, 4))
m.th32ProcessID = Buf2DWORD(SUBSTR(lcProcInfo, 9, 4))
m.th32DefaultHeapID = Buf2DWORD(SUBSTR(lcProcInfo, 13, 4))
m.th32ModuleID = Buf2DWORD(SUBSTR(lcProcInfo, 17, 4))
m.cntThreads = Buf2DWORD(SUBSTR(lcProcInfo, 21, 4))
m.th32ParentProcessID = Buf2DWORD(SUBSTR(lcProcInfo, 25, 4))
m.pcPriClassBase = Buf2DWORD(SUBSTR(lcProcInfo, 29, 4))
m.dwFlags = Buf2DWORD(SUBSTR(lcProcInfo, 33, 4))
m.szExeFile = STRTRAN(SUBSTR(lcProcInfo,37), CHR(0), "")
INSERT INTO Cprocess_info FROM MEMVAR
lcProcInfo= SUBSTR(lcProcInfo, 1, 36) + REPLICATE(CHR(0), lnBufSize - 36)
lnResult = Process32Next(hSnapShot, @lcProcInfo)
ENDDO
CLEAR DLLS OpenProcess, TerminateProcess, CloseHandle
******************************************************************************************************************************
FUNCTION Buf2DWORD(tcBuffer)
******************************************************************************************************************************
** Function Name : Buf[fer] 2 DWORD
** Purpose :
** Description :
** Parameter(s) : Buffer as a Char*4 string
** Return : DWORD type imitation as LONG INTEGER
** Side Effect(s):
** Notes: :
******************************************************************************************************************************
&& RETURN ASC(SUBSTR(lcBuffer, 1, 1)) + ASC(SUBSTR(lcBuffer, 2, 1)) * 2^8 + ASC(SUBSTR(lcBuffer, 3, 1)) * 2^16 + ASC(SUBSTR(lcBuffer, 4,1)) * 2^24
IF TYPE('tcBuffer') # "C"
RETURN 0
ENDIF
tcBuffer = LEFT(ALLTRIM(tcBuffer), 4)
LOCAL I, lnRet
lnRet = 0
FOR I = 0 TO 3
lnRet = lnRet + ASC(SUBSTR(tcBuffer, I + 1, 1)) * 2^(8 * I)
NEXT I
RETURN lnRet
ENDFUNC
******************************************************************************************************************************
******************************************************************************************************************************
FUNCTION Num2DWORD(tnValue)
******************************************************************************************************************************
** Function Name :
** Purpose :
** Description :
** Parameter(s) :
** Return :
** Side Effect(s):
** Notes: :
******************************************************************************************************************************
#DEFINE m0 256
#DEFINE m1 65536
#DEFINE m2 16777216
LOCAL b0, b1, b2, b3
b3 = INT(tnValue / m2)
b2 = INT((tnValue - b3 * m2) / m1)
b1 = INT((tnValue - b3 * m2 - b2 * m1) / m0)
b0 = MOD(tnValue, m0)
RETURN CHR(b0) + CHR(b1) + CHR(b2) + CHR(b3)
ENDFUNC
*Original source:
*
* END PROGRAM
Regards,
Rob
** Program: gets processes running on system
#DEFINE TH32CS_SNAPPROCESS 0x00000002
LOCAL lcProcessName, lnBufSize, lcProcInfo, lnResult, lnProcID, th32DefaultHeapID
LOCAL cntUsage, th32ProcessID, th32ModuleID, cntThreads, th32ParentProcessID, pcPriClassBase, dwFlags, szExeFile
CREATE CURSOR Cprocess_info(szExeFile C(50),cntUsage INT, th32ProcessID INT, th32DefaultHeapID INT,;
th32ModuleID INT, cntThreads INT, th32ParentProcessId INT, pcPriClassBase INT, ;
dwFlags INT)
&& Declare DLLs needed for the case
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 INTEGER CloseHandle IN kernel32 INTEGER hObject
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
lnBufSize = 550
lcProcInfo = Num2DWORD(lnBufSize) + REPLICATE(CHR(0), lnBufSize -32)
** ITERATE THROUGH PROCESSES AND INSERT INTO PROCESS INFO CURSOR
lnResult = Process32First(hSnapShot, @lcProcInfo)
*lnProcID = 0
DO WHILE lnResult # 0
m.cntUsage = Buf2DWORD(SUBSTR(lcProcInfo, 5, 4))
m.th32ProcessID = Buf2DWORD(SUBSTR(lcProcInfo, 9, 4))
m.th32DefaultHeapID = Buf2DWORD(SUBSTR(lcProcInfo, 13, 4))
m.th32ModuleID = Buf2DWORD(SUBSTR(lcProcInfo, 17, 4))
m.cntThreads = Buf2DWORD(SUBSTR(lcProcInfo, 21, 4))
m.th32ParentProcessID = Buf2DWORD(SUBSTR(lcProcInfo, 25, 4))
m.pcPriClassBase = Buf2DWORD(SUBSTR(lcProcInfo, 29, 4))
m.dwFlags = Buf2DWORD(SUBSTR(lcProcInfo, 33, 4))
m.szExeFile = STRTRAN(SUBSTR(lcProcInfo,37), CHR(0), "")
INSERT INTO Cprocess_info FROM MEMVAR
lcProcInfo= SUBSTR(lcProcInfo, 1, 36) + REPLICATE(CHR(0), lnBufSize - 36)
lnResult = Process32Next(hSnapShot, @lcProcInfo)
ENDDO
CLEAR DLLS OpenProcess, TerminateProcess, CloseHandle
******************************************************************************************************************************
FUNCTION Buf2DWORD(tcBuffer)
******************************************************************************************************************************
** Function Name : Buf[fer] 2 DWORD
** Purpose :
** Description :
** Parameter(s) : Buffer as a Char*4 string
** Return : DWORD type imitation as LONG INTEGER
** Side Effect(s):
** Notes: :
******************************************************************************************************************************
&& RETURN ASC(SUBSTR(lcBuffer, 1, 1)) + ASC(SUBSTR(lcBuffer, 2, 1)) * 2^8 + ASC(SUBSTR(lcBuffer, 3, 1)) * 2^16 + ASC(SUBSTR(lcBuffer, 4,1)) * 2^24
IF TYPE('tcBuffer') # "C"
RETURN 0
ENDIF
tcBuffer = LEFT(ALLTRIM(tcBuffer), 4)
LOCAL I, lnRet
lnRet = 0
FOR I = 0 TO 3
lnRet = lnRet + ASC(SUBSTR(tcBuffer, I + 1, 1)) * 2^(8 * I)
NEXT I
RETURN lnRet
ENDFUNC
******************************************************************************************************************************
******************************************************************************************************************************
FUNCTION Num2DWORD(tnValue)
******************************************************************************************************************************
** Function Name :
** Purpose :
** Description :
** Parameter(s) :
** Return :
** Side Effect(s):
** Notes: :
******************************************************************************************************************************
#DEFINE m0 256
#DEFINE m1 65536
#DEFINE m2 16777216
LOCAL b0, b1, b2, b3
b3 = INT(tnValue / m2)
b2 = INT((tnValue - b3 * m2) / m1)
b1 = INT((tnValue - b3 * m2 - b2 * m1) / m0)
b0 = MOD(tnValue, m0)
RETURN CHR(b0) + CHR(b1) + CHR(b2) + CHR(b3)
ENDFUNC
*Original source:
*
* END PROGRAM
Regards,
Rob