Página 1 de 2
Maximizar uma Janela Externa
Enviado: 19 Mar 2018 19:33
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.
Maximizar uma Janela Externa
Enviado: 19 Mar 2018 19:54
por JoséQuintas
Código: Selecionar todos
#include "hbwin.ch"
wapi_ShowWindow( hWnd, WIN_SW_SHOWMAXIMIZED )
Maximizar uma Janela Externa
Enviado: 19 Mar 2018 21:18
por asimoes
Quintas,
Você só não informou como pegar o handle da janela externa usando wapi_*
Maximizar uma Janela Externa
Enviado: 19 Mar 2018 21:26
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.
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
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 08:15
por rubens
Bom dia
ASimoes, só por curiosidade... porque você usa programas externos para gerar relatórios?
Rubens
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 08:27
por asimoes
Porque esse relatório busca informações em banco de dados externos e esse acesso é controlado
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 08:32
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.
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 08:48
por marcosgambeta
Experimente usar a função PostMessage:
Para maximizar:
Para minimizar:
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 10:11
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
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 10:49
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.
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 10:53
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
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 11:18
por asimoes
Rubens,
Infelizmente não tem esse método.
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 11:28
por asimoes
Marcos,
A função retornou .T.
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 12:03
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.
Maximizar uma Janela Externa
Enviado: 20 Mar 2018 12:09
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