Função SETTASKBUTTON wapi semelhante no xharbour

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

Moderador: Moderadores

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

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Mário Isa »

Boa TARDE!
Alguém sabe dizer de uma função no xharbour semelhante à SETTASKBUTTON da WAPI.LIB ?

Mário
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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

Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Maligno »

Para resolver isso, basta acrescentar à função TIRA_X o código abaixo.

Código: Selecionar todos

DeleteMenu(MenuH,SC_CLOSE,MF_BYCOMMAND);
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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
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: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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 é?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
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: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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

botão X - Recolocar

Mensagem 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.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

botão X - Recolocar

Mensagem 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);
}
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder