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:
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:
Obrigado a todos
(A)