Maximizar uma Janela Externa

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Pessoal,

Temos uma aplicação feita em delphi que é um relatório, esse relatório tem os controles de janela minimizar, maximiza e fechar.

Essa aplicação é executada a partir de uma aplicação harbour/hwgui, o controle para saber se a aplicação delphi (relatório) já está rodando eu já fiz, eu preciso de uma função que maximize a tela delphi se o botão do relatório for clicado.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Maximizar uma Janela Externa

Mensagem por JoséQuintas »

Código: Selecionar todos

#include "hbwin.ch"

wapi_ShowWindow( hWnd, WIN_SW_SHOWMAXIMIZED )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Quintas,

Você só não informou como pegar o handle da janela externa usando wapi_*
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Já Tentei isso:

Mas não maximiza: seta vermelha, fiz um teste com Skype e o Gerenciador de Tarefas a função tá funcionando, restaura a tela minimizada.
Essa janela é um relatório feito em delphi, quando minimizado ao clicar no botão Impressão Relatório Expediente se estiver minimizado quero que a tela seja maximizada.
2018-03-19 21_22_33-.png

Código: Selecionar todos

HB_SHOWWINDOW( "Relatorio" )

#pragma BEGINDUMP

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

HB_FUNC( HB_SHOWWINDOW )
{
   SetFocus( ( HWND) FindWindow( NULL, hb_parc(1) ) );
   SetForegroundWindow( ( HWND) FindWindow( NULL, hb_parc(1) ) );
   ShowWindow(( HWND) FindWindow( NULL, hb_parc(1) ), SW_RESTORE );
   ShowWindow(( HWND) FindWindow( NULL, hb_parc(1) ), SW_MINIMIZE );
   ShowWindow(( HWND) FindWindow( NULL, hb_parc(1) ), SW_RESTORE );
}

#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Maximizar uma Janela Externa

Mensagem por rubens »

Bom dia

ASimoes, só por curiosidade... porque você usa programas externos para gerar relatórios?

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Porque esse relatório busca informações em banco de dados externos e esse acesso é controlado
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

A questão ai é que não estou conseguindo manipular a janela externa, quando faz SetForegroundWindow ou SetFocus o outro comando para restaurar não funciona, fica da forma como tá na imagem postada, embora tenha testado com outros e tenha funcionado, enfim.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Maximizar uma Janela Externa

Mensagem por marcosgambeta »

Experimente usar a função PostMessage:

Para maximizar:

Código: Selecionar todos

PostMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
Para minimizar:

Código: Selecionar todos

PostMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Ola Marcos,

Testei a função PostMessage mas não funcionou, essa janela que eu chamo é um relatório quickreport do delphi não sei se ajuda a informação

Tentei até SetForegroundWindow(hWnd); antes da PostMessage


A função que eu testei PostMessage mas não funciona

HB_SHOWWINDOW( "Relatorio" )

Código: Selecionar todos

#pragma BEGINDUMP

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

HB_FUNC( HB_SHOWWINDOW )
{
         HWND hWnd = FindWindow( NULL, hb_parc( 1 ) );
       
       PostMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
       
}

#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Maximizar uma Janela Externa

Mensagem por marcosgambeta »

Veja se está retornando um handle válido:

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 )
  {
    PostMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
    hb_retl( 1 );
  }
  else
  {
    hb_retl( 0 );
  }
}
#pragma ENDDUMP
Deve retornar .T. se achar o handle da janela e .F. se não achar.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Maximizar uma Janela Externa

Mensagem por rubens »

Bom dia...

ASimoes...

Tenho essa rotina para fechar o aplicativo

Código: Selecionar todos

local Retorno := .f.
local oScriptObj
local oWmiService
local oListaProcess
local oProcessos
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )
for Each oProcessos in oListaProcess
   Retorno := .t.
	oProcessos:Terminate() // mata o _cEXE
next
return Retorno
Será que ao invés de oProcessos:Terminate(). não teria uma método oProcessos:Maximize()?
Alguém que entenda bem desse CreateObject() aí não poderia nos ajudar?
Eu tenho o mesmo problema com o acbrmonitor nas versões mais novas. Quando mando imprimir uma nota com preview, abre a nota mas fica minimizado.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Rubens,

Infelizmente não tem esse método.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Marcos,

A função retornou .T.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Maximizar uma Janela Externa

Mensagem por marcosgambeta »

Baseado na imagem que você apresentou:

. a janela "Sistema de Controles de Expedientes Internos" é a janela principal (main) da aplicação

. a janela "Consulta de Expedientes" é uma janela de diálogo da aplicação

. a janela apontada pela seta vermelha é a janela que você quer restaurar (pela forma como está minimizada, ela deve ser 'filha' (child) da aplicação)

A janela "Consulta de Expedientes" é modal ? Pois me parece que algo está bloqueando a janela do relatório.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Maximizar uma Janela Externa

Mensagem por asimoes »

Marcos,

. a janela "Consulta de Expedientes" é uma janela de diálogo da aplicação

É uma janela tipo dialog modal (hwgui)

. a janela apontada pela seta vermelha é a janela que você quer restaurar (pela forma como está minimizada, ela deve ser 'filha' (child) da aplicação)

É uma janela Delphi (quickreport) é somente o relatório não tem janela, já entra mostrado o relatório
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder