based on an example by Michael Rüsweg-Gilbert
This procedure can be used to show a list of all running processes, for example to see if Netscape.exe is running. The process indentifier (pid) can be used for getting additional information about the process, or for terminating the process. See TerminateProcess.
This method only works on Windows 95, Windows 98 and Windows 2000. For Windows NT4.0 you have to use procedure EnumProcesses instead.
To check if you are running Windows NT4.0 see page: which Windows version is running.
RUN ListProcesses. PROCEDURE ListProcesses: DEFINE VARIABLE hSnapShot AS INTEGER NO-UNDO. DEFINE VARIABLE lpPE AS MEMPTR NO-UNDO. /* PROCESSENTRY32 structure */ DEFINE VARIABLE ReturnValue AS INTEGER NO-UNDO. DEFINE VARIABLE list AS CHARACTER NO-UNDO INITIAL "Process-List:". /* Create and open SnapShot-list */ RUN CreateToolhelp32Snapshot({&TH32CS_SNAPPROCESS}, 0, OUTPUT hSnapShot). IF hSnapShot = -1 THEN RETURN. /* init buffer for lpPE */ SET-SIZE(lpPE) = 336. PUT-LONG(lpPE, 1) = GET-SIZE(lpPE). /* Cycle thru process-records */ RUN Process32First(hSnapShot, lpPE, OUTPUT ReturnValue). DO WHILE ReturnValue NE 0: list = list + "~n". /* show process identifier (pid): */ list = list + STRING(GET-LONG(lpPE, 9)) + " ". /* show path and filename of executable: */ list = list + GET-STRING(lpPE, 37). RUN Process32Next(hSnapShot, lpPE, OUTPUT ReturnValue). END. /* Close SnapShot-list */ RUN CloseHandle(hSnapShot, OUTPUT ReturnValue). MESSAGE list VIEW-AS ALERT-BOX. END PROCEDURE.
Definitions used in this procedure:
&GLOB 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.