@Joseg, acabo de probarlo y funciona:
Lo primero, creas un fichero nuevo en el directrio del proyecto y lo llamas
EnumWindowsProc. Luego lo añades en el proyecto (import) y le pegas el siguiente contenido:
Código COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. "EnumWindowsProc".
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SW_MAXIMIZE PIC S9(9) COMP-5 VALUE 3.
01 P1 POINTER.
01 HWND REDEFINES P1 PIC S9(9) COMP-5.
01 P2 POINTER.
01 LPARAM REDEFINES P2 PIC S9(9) COMP-5.
01 processId PIC S9(9) COMP-5.
01 isVisble PIC S9(9) COMP-5.
LINKAGE SECTION.
77 PARM1 PIC S9(9) COMP-5.
77 PARM2 PIC 9(9) COMP-5.
01 RETURN-VALUE PIC 9(9) COMP-5.
PROCEDURE DIVISION WITH STDCALL USING PARM1, PARM2 RETURNING RETURN-VALUE.
MOVE FUNCTION ADDR(PARM1) TO P1
MOVE FUNCTION ADDR(PARM2) TO P2
CALL "GetWindowThreadProcessId" WITH STDCALL USING BY VALUE HWND
BY REFERENCE processId
CALL "IsWindowVisible" WITH STDCALL USING BY VALUE HWND RETURNING isVisble
IF processId = LPARAM AND
isVisble NOT = 0
CALL "ShowWindow" WITH STDCALL USING BY VALUE HWND, SW_MAXIMIZE
CALL "SetForegroundWindow" WITH STDCALL USING BY VALUE HWND
MOVE 0 TO RETURN-VALUE
ELSE
MOVE 1 TO RETURN-VALUE
END-IF
GOBACK
.
No olvides de añadirle la directiva
ALPHAL(WORD) en las propiedades.
Luego desde donde quieras haces algo así (yo lo hago en el evento Click de un botón, recogiendo un PID desde CmText):
Código COBOL:
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ptr-EnumWindowsProc procedure-pointer.
01 num-ptr redefines ptr-EnumWindowsProc pic s9(9) comp-5.
01 pid pic s9(9) comp-5.
PROCEDURE DIVISION.
move pow-numeric of CmText1 to pid
set ptr-EnumWindowsProc to entry "EnumWindowsProc@8"
call "EnumWindows" with stdcall using by value num-ptr
by value pid
Ya nos cuentas qué tal
