Consultor Eletrônico



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.