Ver Mensaje Individual
  #7
Antiguo 7 de noviembre de 2024, 21:58
Kuk
Administrador
Última Actividad 21.09.2026 18:24
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@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:
  1.  IDENTIFICATION DIVISION.
  2.  PROGRAM-ID. "EnumWindowsProc".
  3.  ENVIRONMENT     DIVISION.
  4.  DATA            DIVISION.
  5.  WORKING-STORAGE SECTION.
  6.  01  SW_MAXIMIZE          PIC S9(9) COMP-5 VALUE 3.
  7.  
  8.  01  P1                   POINTER.
  9.  01  HWND REDEFINES P1    PIC S9(9) COMP-5.
  10.  01  P2                   POINTER.
  11.  01  LPARAM REDEFINES P2  PIC S9(9) COMP-5.
  12.  
  13.  01  processId            PIC S9(9) COMP-5.
  14.  01  isVisble             PIC S9(9) COMP-5.
  15.  
  16.  LINKAGE SECTION.
  17.  77  PARM1                PIC S9(9) COMP-5.
  18.  77  PARM2                PIC  9(9) COMP-5.
  19.  
  20.  01  RETURN-VALUE         PIC  9(9) COMP-5.
  21.  
  22.  PROCEDURE DIVISION WITH STDCALL USING PARM1, PARM2 RETURNING RETURN-VALUE.
  23.      
  24.      MOVE FUNCTION ADDR(PARM1) TO P1
  25.      MOVE FUNCTION ADDR(PARM2) TO P2
  26.      
  27.      CALL "GetWindowThreadProcessId" WITH STDCALL USING BY VALUE HWND
  28.                                                         BY REFERENCE processId
  29.                                                        
  30.      CALL "IsWindowVisible" WITH STDCALL USING BY VALUE HWND RETURNING isVisble
  31.      
  32.      IF  processId = LPARAM AND
  33.          isVisble NOT = 0
  34.          CALL "ShowWindow"          WITH STDCALL USING BY VALUE HWND, SW_MAXIMIZE
  35.          CALL "SetForegroundWindow" WITH STDCALL USING BY VALUE HWND
  36.          
  37.          MOVE 0 TO RETURN-VALUE
  38.      
  39.      ELSE
  40.          MOVE 1 TO RETURN-VALUE
  41.      END-IF
  42.      
  43.      GOBACK
  44.      .
  45.          

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:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  ptr-EnumWindowsProc    procedure-pointer.
  5.  01  num-ptr redefines ptr-EnumWindowsProc pic s9(9) comp-5.
  6.  
  7.  01  pid         pic s9(9) comp-5.
  8.  PROCEDURE       DIVISION.
  9.  
  10.      move pow-numeric of CmText1 to pid
  11.      
  12.      set ptr-EnumWindowsProc to entry "EnumWindowsProc@8"
  13.      
  14.      call "EnumWindows" with stdcall using by value num-ptr
  15.                                            by value pid

Ya nos cuentas qué tal



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita