Página 1 de 1

Colocar janela em evidencia, no topo.

Enviado: 08 Dez 2010 17:56
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"

Re: Colocar janela em evidencia, no topo.

Enviado: 09 Dez 2010 10:43
por lugab
Rochinha, em qual lib do Harbour tem isso tudo ?

Gabriel

Re: Colocar janela em evidencia, no topo.

Enviado: 09 Dez 2010 11:51
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.

Re: Colocar janela em evidencia, no topo.

Enviado: 10 Dez 2010 18:20
por lugab
Brigado, Rochinha. Vou procurar a dito cujo

Gabriel

Re: Colocar janela em evidencia, no topo.

Enviado: 10 Dez 2010 22:48
por rochinha
Amiguinho,

Veja estes exemplos de acesso a DLL via Harbour, Aqui

Re: Colocar janela em evidencia, no topo.

Enviado: 12 Dez 2010 19:12
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)

Re: Colocar janela em evidencia, no topo.

Enviado: 24 Mar 2011 09:44
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)