0
Ás vezes necessitamos de executar o código que está num botão, sem o operador saber.
Por exemplo, para correr um programa automaticamente, sem intervenção do operador, mas utilizando o mesmo programa com interface com o operador.
Com este código, podemos simular que foi pressionado um botão (ou CMCommand1).
COBOL Código:
@OPTIONS NOALPHA ***************************************************************** * Copyright (c) 2005 R.P.S. * * Last Modified: Jan 2005. ***************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. INVOKECLICK. AUTHOR. Rui Pinto - MAR 2005. *----------------------------------------------------------------- ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. INPUT-OUTPUT SECTION. FILE-CONTROL. *----------------------------------------------------------------- DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. * * 01 MSGFUNCTION PIC S9(009) COMP-5 VALUE ZERO. 01 MSGPARAM1 PIC S9(009) COMP-5 VALUE ZERO. 01 MSGPARAM2 PIC S9(009) COMP-5 VALUE ZERO. LINKAGE SECTION. 01 WS-HANDLER PIC S9(009) COMP-5. PROCEDURE DIVISION USING WS-HANDLER. MAIN SECTION. MAIN-00. IF WS-HANDLER = 0 CALL "GetFocus" WITH STDCALL RETURNING WS-HANDLER. **** MOUSE DOWN MOVE 513 TO MSGFUNCTION. MOVE 0 TO MSGPARAM2. MOVE 0 TO MSGPARAM1. CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLER BY VALUE MSGFUNCTION BY VALUE MSGPARAM1 BY VALUE MSGPARAM2. **** MOUSE UP MOVE 514 TO MSGFUNCTION. MOVE 0 TO MSGPARAM2. MOVE 0 TO MSGPARAM1. CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLER BY VALUE MSGFUNCTION BY VALUE MSGPARAM1 BY VALUE MSGPARAM2. **** BUTTON STATE MOVE 243 TO MSGFUNCTION. MOVE 0 TO MSGPARAM2. MOVE 0 TO MSGPARAM1. CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLER BY VALUE MSGFUNCTION BY VALUE MSGPARAM1 BY VALUE MSGPARAM2. MAIN-99. END PROGRAM INVOKECLICK. * INVOKE CMCOMMAND2 "SETFOCUS". FOCUS NO BOTAO A CLICKAR * CALL "INVOKECLICK". * INVOKE CMCOMMAND1 "SETFOCUS". FOCUS PARA OUTRO OBJECTO
Espero que ajude alguém.
Un saludo,
Rui Pinto
Marcadores