Iniciar Sesión

Ver la Versión Completa : [Sintaxis] API - SetForegroundWindow


Recato53
22 de diciembre de 2015, 17:15
Estoy intentando programar una API de Windows 'SetForegroundWindow'.

Algo estoy haciendo mal, no consigo que active una Ventana que se queda en la Barra de Herramientas.

Empleo el siguiente código en PowerCobol 9.
WORKING-STORAGE SECTION.
01 S-INDEX PIC S9(9) COMP-5 VALUE 0.
01 WINDOWCLASSE BINARY-LONG VALUE ZERO.
01 HWND BINARY-LONG.

01 WINDOWNAME PIC X(60).

PROCEDURE DIVISION.

MOVE "FR-UTIL" TO WINDOWNAME.

COMPUTE S-INDEX = FUNCTION STORED-CHAR-LENGTH(WINDOWNAME).
ADD 1 TO S-INDEX.
MOVE X"00" TO WINDOWNAME(S-INDEX:1).

************************************************** ***********************

CALL "FindWindowA" WITH STDCALL USING
BY VALUE WINDOWCLASSE
BY REFERENCE WINDOWNAME
RETURNING HWND.

************************************************** ***********************
CALL "SetForegroundWindow" WITH STDCALL USING
BY VALUE HWND.

EXIT PROGRAM.


La variable WINDOWNAME es el formulario que quiero activar.

En las propiedades del script estoy añadiendo la siguiente opción: ALPHAL(WORD)

Rapinto
23 de diciembre de 2015, 00:05
Recato53,

O nome da Window é exactamente o que aparece na barra superior.
Se vires a imagem é:

"FCCID.io-2368817.pdf - Adobe Acrobat Reader DC"

(tens que inclui o nome todo - incluindo espaços)

Se souberes o nome exato da classe é mais fácil pois o nome da classe é sempre igual:
Por exemplo: um documento de WORD tem a ClassName: OpusApp (Depende da versão Office)
uma folha de Excel tem a ClassName: XLMAIN ( depende da versão de Office)
um documento de PDF tem a ClassName: AcrobatSDIWindow (também depende da versão do Acrobat Reader)

Se pretenderes usar a ClassName tens que alterar a Working-Storage, para defenir que vais passar por ClasseName e não por Form Name

Saludos e FELIZ NAVIDAD

Rui Pinto

Recato53
23 de diciembre de 2015, 09:39
Recato53,

O nome da Window é exactamente o que aparece na barra superior.
Se vires a imagem é:

"FCCID.io-2368817.pdf - Adobe Acrobat Reader DC"

(tens que inclui o nome todo - incluindo espaços)

Se souberes o nome exato da classe é mais fácil pois o nome da classe é sempre igual:
Por exemplo: um documento de WORD tem a ClassName: OpusApp (Depende da versão Office)
uma folha de Excel tem a ClassName: XLMAIN ( depende da versão de Office)
um documento de PDF tem a ClassName: AcrobatSDIWindow (também depende da versão do Acrobat Reader)

Se pretenderes usar a ClassName tens que alterar a Working-Storage, para defenir que vais passar por ClasseName e não por Form Name

Saludos e FELIZ NAVIDAD

Rui Pinto

Pretendo activar un Formulario de Powercobol, que después de un proceso, se queda en la Barra de Herramientas.
¿Como consigo levantar este FORM?.

¡¡¡¡FELIZ NAVIDAD!!!!

Rapinto
23 de diciembre de 2015, 12:14
Recato53,

Experimentei este código e funcionou bem.

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
* Minimize current form
INVOKE POW-SELF "ShowForm" USING POW-SWMINIMIZED.
* Call another form with no return
INVOKE pow-self "CallForm" USING "CfForm1".
*
* Open normal the minimized form
INVOKE POW-SELF "ShowForm" USING POW-SWNORMAL.


Não sei se isto resolve o teu problema.

Un saludo e Feliz Navidad
Rui Pinto

Recato53
26 de diciembre de 2015, 13:30
No consigo hacer funcionar las distintas opciones que me proponeis, se sigue quedando el formulario que llama a un proceso en la barra de herramientas.

He partido de una rutina que tienes en POWER+API en la cocina del Foro:
Bring Window to Top (By "Name).

Un saludo. Feliz NAVIDAD.

Rapinto
27 de diciembre de 2015, 22:49
Recato53,

Manda-me um exemplo por Email (ou Mensagem Privada) , para ver se consigo perceber o teu problema.

Não consigo obter a situação que descreves.

Saludos,
Rui

jjcol
30 de julio de 2021, 21:51
Buenas tardes saben de alguna api, para dejar columnas estáticas

Kuk
30 de julio de 2021, 23:33
@jjcol, a qué columnas te refieres, a las de ListView?

jjcol
31 de julio de 2021, 00:29
@jjcol, a qué columnas te refieres, a las de ListView?

si ListView es le que estoy utilizando, power cobol 9

Kuk
31 de julio de 2021, 10:04
para dejar columnas estáticas


IDENTIFICATION DIVISION.
PROGRAM-ID. VISTA-EXTENDIDA.
**************************************************
* RUTINA PARA OPCIONES EXTENDIDAS EN EL LISTVIEW *
**************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*MOVE "HWND" OF NOMBRE-CONTROL TO WS-HANDLE
01 WS-LINEA-ENTERA PIC S9(9) COMP-5 VALUE 32.
01 WS-LINK PIC S9(9) COMP-5.
01 WS-GRID PIC S9(9) COMP-5 value 01.
01 WS-DRAG PIC S9(9) COMP-5 VALUE 16.
01 LVM-SETEXTENDEDLISTVIEWSTYLE PIC S9(9) COMP-5 VALUE 4150.
01 LVS-EX-FULLROWSELECT PIC S9(9) COMP-5 VALUE 32.
01 LVS-EX-HEADERDRAGDROP PIC S9(9) COMP-5 VALUE 16.
01 LVS-EX-GRIDLINES PIC S9(9) COMP-5 VALUE 01.
01 LVS-EX-FLATSB PIC S9(9) COMP-5 VALUE 256.
01 LVS-NOSORTHEADER PIC S9(9) COMP-5 VALUE h"8000".
01 LV-STYLE PIC S9(9) COMP-5.
01 LVM_GETHEADER PIC S9(9) COMP-5 VALUE h"101F".
01 RESP PIC S9(9) COMP-5.
LINKAGE SECTION.
01 WS-HANDLE PIC S9(9) COMP-5.

PROCEDURE DIVISION USING WS-HANDLE.
**********************************************
**** HABILITA LINEA ENTERA EN EL LISTVIEW ****
**********************************************
CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE LVM-SETEXTENDEDLISTVIEWSTYLE
BY VALUE LVS-EX-FULLROWSELECT
BY VALUE WS-LINEA-ENTERA

************************************************** **
**** HABILITA CAMBIO DE COLUMNAS EN EL LISTVIEW ****
************************************************** **
CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE LVM-SETEXTENDEDLISTVIEWSTYLE
BY VALUE LVS-EX-HEADERDRAGDROP
BY VALUE WS-DRAG

************************************************** ***
**** HABILITA APARIENCIA DE TABLA EN EL LISTVIEW ****
************************************************** ***
CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE LVM-SETEXTENDEDLISTVIEWSTYLE
BY VALUE LVS-EX-GRIDLINES
BY VALUE WS-GRID

************************************************** ***
**** HABILITA FLAT SCROLLBARS ****
************************************************** ***
CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE LVM-SETEXTENDEDLISTVIEWSTYLE
BY VALUE LVS-EX-FLATSB
BY VALUE -1

************************************************** ***
**** DESHABILITA CABECERA ****
************************************************** ***
CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE LVM_GETHEADER
BY VALUE 0
BY VALUE 0
RETURNING RESP

CALL "EnableWindow" WITH STDCALL USING BY VALUE RESP
BY VALUE 0

************************************************** ***
**** DESHABILITA BOTONES ****
************************************************** ***
CALL "GetWindowLongA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE -16
RETURNING LV-STYLE .

ADD LVS-NOSORTHEADER TO LV-STYLE

CALL "SetWindowLongA" WITH STDCALL USING BY VALUE WS-HANDLE
BY VALUE -16
BY VALUE LV-STYLE
.



No te aolvides de añadir la opción ALPHAL(WORD)