Colocar janela em evidencia, no topo.

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

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Colocar janela em evidencia, no topo.

Mensagem por rochinha »

Amiguinhos,

Trazendo uma nova duvida para este tópico aqui vão algumas dicas de uso das funções existentes na API do Windows:

As funções são, BringWindowToTop() e FindWindow():

Exemplo:

Código: Selecionar todos

BringWindowToTop( FindWindow( 0, "program manager" ) )
Onde FindWindow() encontra a janela pesquisada, pelo nome existente na barra e BringWindowToTop() faz com que a mesma fique a frente de todas.

Sintaxes:

Código: Selecionar todos

DLL32 FUNCTION BringWiToT;
      ( hwnd AS LONG ) ;
   AS LONG PASCAL; 
   FROM "BringWindowToTop" LIB "USER32"

DLL32 FUNCTION FindWindoA;
      ( lpClassName AS STRING, ;
        lpWindowName AS STRING ) ;
   AS LONG PASCAL; 
   FROM "FindWindowA" LIB "USER32"
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Colocar janela em evidencia, no topo.

Mensagem por lugab »

Rochinha, em qual lib do Harbour tem isso tudo ?

Gabriel
lugab
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Colocar janela em evidencia, no topo.

Mensagem por rochinha »

Amiguinho,

Use os recursos do seu Harbour para acesso a funções em DLLs via CallDLL, etc.

As funções acima são a sintaxe para que voce saiba o nome, parametros e DLL do Windows usada para o intercambio.

Veja que elas apontam para uma DLL existente no seu S.O.

USER32 se refere a USER32.DLL do Windows.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Colocar janela em evidencia, no topo.

Mensagem por lugab »

Brigado, Rochinha. Vou procurar a dito cujo

Gabriel
lugab
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Colocar janela em evidencia, no topo.

Mensagem por rochinha »

Amiguinho,

Veja estes exemplos de acesso a DLL via Harbour, Aqui
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
MarcosV
Usuário Nível 3
Usuário Nível 3
Mensagens: 106
Registrado em: 15 Jun 2005 20:37
Localização: Sorocaba/SP

Re: Colocar janela em evidencia, no topo.

Mensagem por MarcosV »

Olá,

Fiz varios testes mas não consegui obter o resultado quero preciso, que é: quando o sistema ja esta sendo executado, ele é traduzido pra frente. Mas tem um porém preciso abrir varios executaveis iguais (em pastas diferentes), mas ao mesmo tempo, então esse codigo abaixo (adaptado) seria o ideal pra mim.

Se alguém puder me ajudar, agradeço muito.

Obs: Uso o xHarbour 1.2.1

Obrigado

Código: Selecionar todos

FUNCTION TRAVAJANELA()
IF ( Empty(CreateMutex(,.T.,StrTran(GetModuleFileName(),'\','_')) ) .Or. (GetLastError() > 0 ) )
   ALERT( "Sistema em Execução;;Não é possível executar o programa mais de uma vez !" )
   __Quit()
ENDIF
RETURN(NIL)
Marcos Villela
x[H]arbour.org (CVS) | GtWvW+HwGui (CVS) | HbMake | Dbf | Rdd DbfCdx | LeToDb (CVS) (Implantando)
===============================================================
“Quem nunca dormiu à noite e acordou de repente, suando frio e chorando, chorando e
chorando? Se isso lhe aconteceu, então você foi apanhado pelo blues.” (Robert Johnson)
Sweet Home Chicago (Versão Blind Bulldog Blues): www.youtube.com/watch?v=J-V61vQTSZs
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Colocar janela em evidencia, no topo.

Mensagem por Mário Isa »

Muito obrigado pelas dicas .
Mas no meu foi assim q funcionou :

Obs: Se alguem quiser melhorar o meu código toda ajuda é sempre bem vinda.


Vejamos neste exemplo eu chamo a calculadora . porem se ela estiver em execução / seja minimizada/ ou seja por trás de mim. ela vem ao primeiro plano.

Neste código eu chamo a calculadora

Código: Selecionar todos

FUNCTION CALCU()


hCalc := FindWindow( 0, "Calculadora" )
lCaptured := ( hCalc > 0 )
IF lCaptured
 Focaliza_app('Calculadora','max')
ELSE
 WinExec( "calc" )
ENDIF

return nil

Esta função eu peguei daqui mesmo do fórum e implementei.

Código: Selecionar todos

#pragma BEGINDUMP

#include "windows.h"
#include "shlobj.h"
#include "hbapi.h"
#include "math.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"
#include "hbapigt.h"

HB_FUNC ( SHOWTASKBAR )      //Habilita o botao INICIAR
{
  HWND hWnd = FindWindow("Shell_TrayWnd", "");

  ShowWindow( hWnd, 1 );
}

HB_FUNC ( HIDETASKBAR )     //Desabilita o botao Iniciar
{
  HWND hWnd = FindWindow("Shell_TrayWnd", "");

  ShowWindow( hWnd, 0 );
}

HB_FUNC ( PISCA_EXE )      // VAI PISCAR O SEU EXE NA BARRA
{
    HWND  Handle = GetForegroundWindow();

    FlashWindow(Handle,TRUE);  

    Sleep(300);    // TEMPO DE ESPERA
}


HB_FUNC ( TIRA_X )        // DESABILITA O X da janela

{
    HMENU MenuH = GetSystemMenu(GetForegroundWindow(),FALSE);


    DeleteMenu(MenuH,SC_CLOSE,MF_BYCOMMAND);

}

#pragma ENDDUMP

//    EnableMenuItem(MenuH,SC_CLOSE,MF_GRAYED);
//

*********************
Function Focaliza_App(o_exe,o_como)
*********************

oWnd := SY_FindWindow(o_exe)

if empty(ownd)
 return nil
end
if o_como = 'max'
 SY_showWindow( oWnd, 9 )
 BringWindowToTop( oWnd )
elseif o_como = 'min'
 sy_closewindow(ownd) //para minimizar
end
Return Nil

#pragma BEGINDUMP

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

VOID SY_SwitchToThisWindow(  HWND hWnd,  BOOL fAltTab );
HB_FUNC( SY_FINDCONSOLEHANDLE ) //FindConsoleHandle
{
   HWND hwnd;
AllocConsole();
    hwnd = FindWindowA("ConsoleWindowClass",NULL);
hb_retnl( (LONG) hwnd );
}
HB_FUNC( SY_CLOSEWINDOW )
{
   hb_retl( CloseWindow( (HWND) hb_parnl(1) ) );
}

HB_FUNC( SY_FINDWINDOW )
{
   hb_retnl((ULONG) FindWindow( (LPCSTR)
   NULL, hb_parcx(1))) ;
}

HB_FUNC( SY_GETFOREGROUNDWINDOW )
{
   HWND hwnd;
   hwnd = GetForegroundWindow();
   hb_retnl( (LONG) hwnd );
}

HB_FUNC( SY_SHOWWINDOW )
{
   hb_retl( ShowWindow(
  (HWND) hb_parnl(1), hb_parni(2) ));
}

HB_FUNC( SY_SETFOREGROUNDWINDOW )
{
   hb_retl( SetForegroundWindow(
     (HWND) hb_parnl( 1 ) ) ) ;
}

HB_FUNC( SY_SWITCHTOTHISWINDOW )
{
   HWND hWnd;
   hWnd = (HWND) hb_parnl(1);
   hb_retl(SetForegroundWindow(hWnd));
}
#pragma ENDDUMP


Conforme vc pôde ver se vc quiser minimizar é só mandar o 2º parâmetro como 'min' que ele minimizará a janela. Veja o exemplo:

Código: Selecionar todos

Focaliza_App('Calculadora','min')
Obrigado a todos
(A)
Responder