Página 2 de 2

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 12:10
por marcosgambeta
Outra possibilidade para testar:

Depois de obter o handle da janela, executar esta sequencia:

Código: Selecionar todos

ShowWindow(hWnd, SW_SHOW);
ShowWindow(hWnd, SW_RESTORE);
SetForegroundWindow(hWnd); 

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 12:17
por asimoes
Marcos,

A janela Quick Report é essa.
2018-03-20 12_15_14-.png

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 12:19
por asimoes
Marcos, não funcionou, coisas do windows.

A janela fica assim:
2018-03-20 12_17_51-.png
2018-03-20 12_17_51-.png (11.42 KiB) Exibido 1735 vezes

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 12:43
por marcosgambeta
O nome que você usa para localizar a janela com FindWindow é este ?

"Report Preview :"

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 12:56
por asimoes
Não é "Relatorio" esse é no nome da janela que chama o quickreport,

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 13:17
por asimoes
Marcos,

No nome do executável que também é a janela.

É Relatorio porque eu consigo fechar a janela:

Código: Selecionar todos

  hWnd := FindWindow( 'Relatorio' )
   
   IF hWnd > 0
      hwg_Postmessage(hWnd, WM_CLOSE, 0, 0 )
   ENDIF

2018-03-20 13_14_32-Report Preview _.png

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 13:36
por asimoes
Acho que assim dá pra ver nome da janela
2018-03-20 13_34_19-.png

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 14:02
por marcosgambeta
Poderia testar esta rotina e informar o resultado ?

Use assim: lRet := HB_ShowWindow( "Relatorio", "Report Preview :")

Código: Selecionar todos

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( HB_SHOWWINDOW )
{
  HWND hWnd = FindWindow( NULL, hb_parc( 1 ) );

  if( hWnd )
  {
    HWND hWndChild = FindWindowEx( hWnd, NULL, NULL, hb_parc( 2 ) );

    if( hWndChild )
    {
      PostMessage(hWndChild, WM_SYSCOMMAND, SC_RESTORE, 0);
      hb_retl( 1 );
    }
    else
    {
      hb_retl( 0 );
    }
  }
  else
  {
    hb_retl( 0 );
  }
}

#pragma ENDDUMP

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 15:02
por asimoes
Marcos,

Retornou .F.

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 20:44
por JoséQuintas

Código: Selecionar todos

wapi_ShowWindow( wapi_FindWindow( 0, "Relatorio" ), SW_RESTORE )
wapi_ShowWindow( wapi_FindWindow( 0, "Relatorio" ), SW_MAXIMIZE )

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 20:50
por JoséQuintas
Complemento:

Pelo menos num teste em WVG funcionou....

Código: Selecionar todos

-------------test.prg
REQUEST HB_CODEPAGE_PTISO

PROCEDURE Main

   LOCAL oControl, aOptions, cOption, nRow


   Set( _SET_CODEPAGE, "PTISO" )
   SetMode(33,90)
   SetColor("W/B")
   CLS
   wapi_ShowWindow( wapi_FindWindow( 0, "test" ), SW_RESTORE )
   wapi_ShowWindow( wapi_FindWindow( 0, "test" ), SW_MAXIMIZE )
   //LoadAllFont()

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 20:57
por JoséQuintas
E mais um complemento.... rs

Funcionou o Maximizar janela... não que tenha funcionado pra WVG, que ficou com a janela doidinha, maximizada mas sem atualização... rs
Então tem mais essa também...
wvg.png

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 21:05
por asimoes
Quintas,

Fiz um teste aqui não funcionou

cApp := 'Gerenciador de Tarefas'

wapi_ShowWindow( wapi_FindWindow( 0, cApp), SW_RESTORE )
wapi_ShowWindow( wapi_FindWindow( 0, cApp ), SW_MAXIMIZE )

Assim funciona

hb_ShowWindow(cApp)

Código: Selecionar todos

#pragma BEGINDUMP

#include "windows.h"
#include "hbapi.h"

HB_FUNC( HB_SHOWWINDOW )
{
   HWND hWnd = FindWindow( NULL, hb_parc( 1 ) );
   SetForegroundWindow( hWnd );
   SendMessage( hWnd, WM_SYSCOMMAND, SC_RESTORE, 0 );
}
#pragma ENDDUMP

Maximizar uma Janela Externa

Enviado: 20 Mar 2018 22:31
por JoséQuintas
No fonte que coloquei está executando o comando do Windows pra maximizar uma janela.

No fonte que colocou está enviando a mensagem de maximizar para a janela, que acabará sendo processada pelo aplicativo Delphi.

Se imaginar que pode ser um controle activex, o aplicativo repassa ao activex, enquanto o comando direto do Windows pode ser recusado.
Mas é só suposição minha, não sei se seria isso mesmo.