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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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