Página 1 de 3
Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Jun 2008 14:14
por Mário Isa
Boa TARDE!
Alguém sabe dizer de uma função no xharbour semelhante à SETTASKBUTTON da WAPI.LIB ?
Mário
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Jun 2008 15:36
por sygecom
Seria isso ?
SHOWTASKBAR()
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);
EnableMenuItem(MenuH,SC_CLOSE,MF_GRAYED);
}
#pragma ENDDUMP
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 29 Nov 2008 13:50
por Mário Isa
Seguindo essa mesma idéia /
existe alguma função para
a)pegar o handle da janela
b) focar uma determinada janela de um det. handle
Mário
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 29 Nov 2008 14:14
por sygecom
Pode usar a função abaixo:
Código: Selecionar todos
*********************
Function Focaliza_App
*********************
oWnd := SY_FindWindow("NO DO EXE OU DO TITULO DA JANELA")
SY_SwitchToThisWindow(oWnd,.f.)
SY_showWindow( oWnd, 9 )
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
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Dez 2008 13:16
por Mário Isa
A função TIRA_X() funcionou / o botão X some mesmo / mas se alguem clicar no menu de controle da janela / o menu superior esquerdo / o botão X volta a aparecer / não é mais cinza / torna-se disponível /
Mário
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Dez 2008 13:24
por Maligno
Para resolver isso, basta acrescentar à função TIRA_X o código abaixo.
Aliás, com esta função, a linha da chamada da função EnableMenuItem() até pode ser removida, pois uma vez que a opção de menu será excluída, automaticamente o botão X se tornará indisponível, mudando de cor.
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Dez 2008 13:38
por Mário Isa
Tem alguma função para minimizar uma janela ? ou até para minimizar a própria janela ?
Outra coisa:
Tentei utilizar a função SY_CLOSEWINDOWS(oWnd)
mas ele não a fechou e sim a minimizou
Mário
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Dez 2008 13:54
por Maligno
A função CloseWindow() utilizada na função SY_CLOSEWINDOW() não é para encerrar a aplicação, mas para minimizar mesmo. Isso responde sua primeira pergunta.
Para encerrar a aplicação você precisaria utilizar a função TerminateProcess() da API do Windows. Sendo
Handle o nome da variável que contém a alça da aplicação, o código em C é:
Código: Selecionar todos
DWORD ProcessID;
GetWindowThreadProcessId(Handle,&ProcessID);
if (ProcessID)
TerminateProcess(OpenProcess(PROCESS_TERMINATE,FALSE,ProcessID),0);
Agora se for pra fechar uma aplicação pelo nome do EXE a coisa fica mais complicada, pois será necessário listar processos, verificar nome, etc. Mas me parece que não é essa sua necessidade, não é?
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Dez 2008 14:35
por Mário Isa
para compilar em C eu preciso de um compilador exclusivo C ?
Ou no xharbour eu consigo inserir alguma opção especial e compilar ?
Quanto à função do focaliza_app / eu só estou conseguindo focalizar se fornecer o nome da janela como ele é / se eu fornecer o nome do executável ele não foca /
Mário
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 30 Dez 2008 16:50
por Maligno
para compilar em C eu preciso de um compilador exclusivo C ?
A função que o Leonardo postou já é XHarbour, que por sua vez também compila código C. É só acrescentar aquela linha (ou substituir pela outra), conforme eu disse.
Quanto à função do focaliza_app / eu só estou conseguindo focalizar se fornecer o nome da janela como ele é / se eu fornecer o nome do executável ele não foca /
Pra alterar isso será necessário pesquisar pelos processos e encontrar a janela pelo nome do EXE. Bem mais trabalhoso. Mas se tiver o handle da janela será mais fácil. Fiz desse jeito na WAPI.
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 12 Jan 2009 12:52
por sygecom
Mário Isa escreveu:para compilar em C eu preciso de um compilador exclusivo C ?
Ou no xharbour eu consigo inserir alguma opção especial e compilar ?
Olá Mario,
Note que tudo que tiver entre
#pragma BEGINDUMP e
#pragma ENDDUMP é função em C, porem usando a wapper do xharbour.
Quanto à função do focaliza_app / eu só estou conseguindo focalizar se fornecer o nome da janela como ele é / se eu fornecer o nome do executável ele não foca /
Exatamente isso, é com esse objetivo que ela foi feita. para focalizar passando o nome da janela, pq o EXECUTAVEL pode ser facilmente alterado pelo usuario.
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 10 Jun 2009 20:14
por Mário Isa
Na função TIRA_X
HB_FUNC ( TIRA_X ) // DESABILITA O X da janela
{
HMENU MenuH = GetSystemMenu(GetForegroundWindow(),FALSE);
EnableMenuItem(MenuH,SC_CLOSE,MF_GRAYED);
}
Teria como eu programar alguma coisa para / no momento em que alguem clicar no botão fechar / digamos que eu não o tenha desabilitado / esta funçao (ou outra) fosse invocada e produzisse um arquivo chamado digamos
DETERMx.TXT ?
a minha idéia é a seguinte:
no meu programa / a simples presença do arquivo DETERMx.TXT (onde x é o numero da estação) / faz fechar o programa
então / se eu pudesse programar / de tal forma que / se alguem clica no botão fechar / eu produzo o arquivo DETERMx.TXT / e é só / o meu sistema se encarrega do resto (que é fechar o programa).
será que dá ?
Mário
Re: Função SETTASKBUTTON wapi semelhante no xharbour
Enviado: 15 Jun 2009 15:07
por sygecom
Por acaso vc esta usando alguma LIB grafica ?
Já tentou colocar uma funcção com EXIT ? EX:
Código: Selecionar todos
EXIT FUNCTION FECHA_AUTO
alert("aqui gera o tal arquivo")
Return
botão X - Recolocar
Enviado: 11 Abr 2012 08:28
por Mário Isa
Bom dia amigos.
Já foi bastante falado aqui sobre "tirar" o botão X (fechar) da janela
Mas o que preciso é
1º) Eu preciso "tirar" e isso eu já sei.
Segue o código da função tira_x()
Código: Selecionar todos
HB_FUNC ( TIRA_X ) // DESABILITA O X da janela
{
HMENU MenuH = GetSystemMenu(GetForegroundWindow(),FALSE);
DeleteMenu(MenuH,SC_CLOSE,MF_BYCOMMAND);
}
Para "recolocar" o botão que havia sido tirado. em lugar de DeleteMenu o que eu colocaria ?
Obrigado desde ja
:{
Nota de Moderação:por
Pablo César: Sua mensagem foi unida ao tópico presente que tem relação, assim fica mais fácil encontrar as funções em comuns.
botão X - Recolocar
Enviado: 11 Abr 2012 12:13
por Pablo César
Oi Mário,
Eu não testei, mas tenta este código:
Código: Selecionar todos
HB_FUNC ( VOLTA_X ) // HABILITA O X da janela
{
HMENU MenuH = GetSystemMenu(GetForegroundWindow(),TRUE);
EnableMenuItem(MenuH,SC_CLOSE,MF_GRAYED);
}