Kbase 19757: Get PID & Process Names of Running Processes (Win9x & 2000)
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  2/7/2008 |
|
Status: Unverified
GOAL:
How to retrieve PID's & Process names of running processes from within Progress.
FACT(s) (Environment):
Windows 32 Intel
Windows NT 32 Intel/Windows 2000
FIX:
Code example:
&GLOBAL-DEFINE TH32CS_SNAPPROCESS 2
PROCEDURE CreateToolhelp32Snapshot EXTERNAL "kernel32":
DEFINE INPUT parameter dwFlags AS LONG.
DEFINE INPUT parameter th32ProcessId AS LONG.
DEFINE RETURN parameter hSnapShot AS LONG.
END PROCEDURE.
PROCEDURE Process32First EXTERNAL "kernel32":
DEFINE INPUT parameter hSnapShot AS LONG.
DEFINE INPUT parameter lpProcessEntry32 AS MEMPTR.
DEFINE RETURN parameter ReturnValue AS LONG.
END PROCEDURE.
PROCEDURE Process32Next EXTERNAL "kernel32":
DEFINE INPUT parameter hSnapShot AS LONG.
DEFINE INPUT parameter lpProcessEntry32 AS MEMPTR.
DEFINE RETURN parameter ReturnValue AS LONG.
END PROCEDURE.
PROCEDURE CloseHandle EXTERNAL "kernel32":
DEFINE INPUT parameter hObject AS LONG.
DEFINE RETURN parameter ReturnValue AS LONG.
END PROCEDURE.
RUN ListProcesses.
PROCEDURE ListProcesses:
DEFINE VARIABLE vPID AS INTEGER NO-UNDO.
DEFINE VARIABLE hSnapShot AS INTEGER NO-UNDO.
DEFINE VARIABLE lpPE AS MEMPTR NO-UNDO.
DEFINE VARIABLE ReturnValue AS INTEGER NO-UNDO.
DEFINE VARIABLE v-processlist AS CHARACTER NO-UNDO.
RUN CreateToolhelp32Snapshot({&TH32CS_SNAPPROCESS}, 0, OUTPUT hSnapShot).
IF hSnapShot = -1 THEN
RETURN.
SET-SIZE(lpPE) = 336.
PUT-LONG(lpPE, 1) = GET-SIZE(lpPE).
RUN Process32First(hSnapShot, lpPE, OUTPUT ReturnValue).
DO WHILE ReturnValue 0:
vPID = GET-LONG(lpPE, 9).
v-processlist = v-processlist + "~n" + STRING(vPID) + " " + GET-STRING(lpPE,37).
/* Test for a certain Process Name - Prowin32.exe */
IF INDEX(GET-STRING(lpPE, 37), "prowin32.exe") > 0 THEN
MESSAGE vPid GET-STRING(lpPE, 37) VIEW-AS ALERT-BOX.
RUN Process32Next(hSnapShot, lpPE, OUTPUT ReturnValue).
END.
RUN CloseHandle(hSnapShot, OUTPUT ReturnValue).
/* Full List of PID's & Process Names */
MESSAGE v-processlist VIEW-AS ALERT-BOX.
END PROCEDURE.