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 »

Deu o seguinte erro:

funhar.prg(120): error: Syntax error; found 'end of input' expecting ';'.
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

Deu o seguinte erro:

funhar.prg(120):
E o que contém na linha 120 do funhar.prg ?

Pela mensagem é um erro no seu código em C. Por acaso não faltaria um ";" ?

Adaptei o meu código indicado para a função DeleteMenu que você utiliza:

Código: Selecionar todos

HB_FUNC ( VOLTA_X ) // HABILITA O X da janela
	{
	HMENU MenuH = GetSystemMenu(GetForegroundWindow(),TRUE);
	 
	DeleteMenu(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.
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 »

Agora eu tentei

Código: Selecionar todos

HB_FUNC ( VOLTA_X )        // DESABILITA O X da janela

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


    InsertMenu(MenuH,SC_CLOSE,MF_BYCOMMAND);

}
Mas deu o erro:

funhar.prg(125): error: Insufficient number of arguments to a function.
E o conteudo da 125 é

InsertMenu(MenuH,SC_CLOSE,MF_BYCOMMAND);

:%
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

Para mim estou conseguindo só que EnableMenuItem mantive ... anexei o executável par você ver, Mario:

Código: Selecionar todos

#include <hmg.ch>

Function Main
DEFINE WINDOW Win_1 AT 138 , 235 WIDTH 550 HEIGHT 350 VIRTUAL WIDTH Nil VIRTUAL HEIGHT Nil TITLE "" ICON NIL MAIN CURSOR NIL ON INIT Nil ON RELEASE Nil ON INTERACTIVECLOSE Nil ON MOUSECLICK Nil ON MOUSEDRAG Nil ON MOUSEMOVE Nil ON SIZE Nil ON MAXIMIZE Nil ON MINIMIZE Nil ON PAINT Nil BACKCOLOR Nil NOTIFYICON NIL NOTIFYTOOLTIP NIL ON NOTIFYCLICK Nil ON GOTFOCUS Nil ON LOSTFOCUS Nil ON SCROLLUP Nil ON SCROLLDOWN Nil ON SCROLLLEFT Nil ON SCROLLRIGHT Nil ON HSCROLLBOX Nil ON VSCROLLBOX Nil
    DEFINE BUTTON Button_1
        ROW    90
        COL    170
        WIDTH  100
        HEIGHT 28
        ACTION Tira_X()
        CAPTION "Desabilita"
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        MULTILINE .F.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON

    DEFINE BUTTON Button_2
        ROW    170
        COL    170
        WIDTH  100
        HEIGHT 28
        ACTION Volta_X()
        CAPTION "Habilita"
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        MULTILINE .F.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON

END WINDOW
Win_1.Center
Win_1.Activate
Return


#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 ( TIRA_X )        // DESABILITA O X da janela

{
    HMENU MenuH = GetSystemMenu(GetForegroundWindow(),FALSE);
 
    EnableMenuItem(MenuH,SC_CLOSE,MF_GRAYED);
}
 
HB_FUNC ( VOLTA_X )        // DESABILITA O X da janela
{
    HMENU MenuH = GetSystemMenu(GetForegroundWindow(),FALSE);

    EnableMenuItem(MenuH,SC_CLOSE,MF_BYCOMMAND);
}
#pragma ENDDUMP
Compilei com HMG.
Anexos
demo.rar
(653.02 KiB) Baixado 345 vezes
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.
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 »

agora deu certo compilar...

porem o X não voltou....
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

Você não testou com o executável que disponibilizei. Alguma coisa no seu Harbour...
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.
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 »

Finalmente tive tempo de testar

E vi que:

A sua função tira_x

Código: Selecionar todos

HB_FUNC ( TIRA_X )        // DESABILITA O X da janela
	 
{
    HMENU MenuH = GetSystemMenu(GetForegroundWindow(),FALSE);
	  
    EnableMenuItem(MenuH,SC_CLOSE,MF_GRAYED);
}
é diferente da minha 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);
}
Observe que na minha foi usado o DeleteMenu, ou seja exclui-se até mesmo a opção Fechar lá do menu da barra de tarefas (sabe, quando vc clica no programa minimizado lá embaixo?) então / até aquilo sumiu

E na sua apenas desabilitou o botão fechar.

Mas vou tentar da sua forma e ver no que dá.

Mário
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 »

Pablo!

Sucesso!

Utilizei a sua tira_x e deu certinho.

Valeu mesmo......

Isso resolve alguns problemas pois tinha operadores q fechavam a aplicação antes de ela concluir alguns procedimentos.

Agora ficou jóia...
:)Pos

Eu estava olhando a sua telinha. Qual a lib q vc utiliza para produzir os botões e janelas ?
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

A sua função tira_x ...//... é diferente da minha tira_x
Pensei que você já tinha notado. Pois eu mencionei isso nesta minha mensagem bem no começo onde diz Para mim estou conseguindo só que EnableMenuItem
Eu estava olhando a sua telinha.
Telinha ? Quer dizer a tela do demo.exe que postei ?
Qual a lib q vc utiliza para produzir os botões e janelas ?
Puro e exclusivo HMG (mas também utilizo MIniGUI), sem esforço algum. Aliás essa função de tira e poe o x tem esse recurso como função interna nas propriedades das janelas no HMG.
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.
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

Nessa sua tentativa de utilizar o InsertMenu, aqui nesta sua mensagem deu erro porque está faltando parâmetros. Os poucos exemplos que eu já vi, parecem um tanto laborioso. Veja a sintaxe:
InsertMenu( <hMenu>, <nIdItem>, <nFlags>, <nNewItem>, <cPrompt> ) –> lSuccess

Parameters

<hMenu> Handle of the menu where we will insert the menuitem

<nIdItem> Identifier of the menuitem. It will depend on that that let us indicate in nFlags so that it is an identifier that is to say the position of the Menuitem inside the menu.

<nFlags> Constant MF_BYCOMMAND or MF_BYPOSITION that it will indicate as nIdItem should be interpreted. It combines with those following constants to indicate that class of menuitem is inserting in our menu.

MF_BITMAP 4 It contains a bitmap MF_CHECKED 8 Marked Menuitem MF_DISABLED 2 Disabled Menuitem MF_ENABLED 0 Enabled Menuitem MF_POPUP 16 It contains submenu MF_GRAYED 1 Gray Menuitem MF_MENUBARBREAK 32 Break in the menu bar MF_MENUBREAK 64 Break in a vertical menu MF_OWNERDRAW 256 Owner draw MF_SEPARATOR 2048 Separator MF_UNCHECKED 0 Normal state of the menuitem MF_BYCOMMAND 0 nIdItem is identifier MF_BYPOSITION 1024 nIdItem is position based 0

<nNewItem>n New identifier for the menuitem. If nFlags contains MF_POPUP in nNewItem the handle of the submen� will be stored.

<cPrompt>n String to indicate in the menuitem. If nFlags contains MF_BITMAP this parameter will be the Handle of the bitmap. If MF_OWNERDRAW contains the parameter it will be included in those it structures DRAWITEMSTRUCT and MEASUREITEMSTRUCT that Windows sends when it has to draw elements of owner draw. (to see method DrawItem and MeasureItem in the class TWindow).
Por isso decidí refazer o meu exemplo com EnableMenuItem em lugar de DeleteMenu.
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.
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 »

Agora estou precisando de uma função harbour que substitua esta:

SetTaskBut(<nCond>,[<nHandle>]) -> nil
Torna invisível (nCond = 0) ou visível (nCond = 1) o botão da aplicação (focalizada) na
TaskBar. Aliás, a própria janela tornar-se-á invisível (ou visível). De forma opcional, é
possível direcionar a função para uma aplicação específica, ao informar o <nHandle> desta.

Esta SetTaskBut é da wapi.lib do Maligno

Ela simplesmente "apaga" o botão do programa que está rodando e ele fica invisível.
Tem algo em harbour ?

X:)
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

Ela simplesmente "apaga" o botão do programa que está rodando e ele fica invisível.
A função do Wapi do Maligno, oculta e mostra a janela N e não é o botão como você diz. Sei que na documentação, até mesmo o arquivo fonte do Wapi fala sobre o botão, mas é na janela que atua. Você confirma, Mário ?

Particularmente, não vejo serventia nisso. Poderia explicar para o quê você iria utilizar isso, esconder janelas. Pois isso pode esquecer que a janela está aberta, porem escondida: na verdade. Isso não poderia causar alguns transtornos se deixar na mão do usuário ?

Outra coisa, você diz que quer substituir essa função do Wapi, mas precisaria o número do handle da janela. E como você pensa obter essa informação ?. Ou será que você poderia informar o título da janela ou até mesmo o nome do programa que está sendo executado. Você não acha ? Ou atuaria apenas no módulo que está sendo executado ?
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.
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 »

Acabei de descobrir através da WAPI eu posso até fazer assim:

Código: Selecionar todos

comanda := "WAPI -GETMYHANDLE:MYHAND.TXT"
run (comanda)

comanda := "WAPI -SETTASKBUTTON:HIDE" + memoread('myhand.txt')
run (comanda)
Mas na verdade nem precisaria do handle

É só fazer:

Código: Selecionar todos

comanda := "WAPI -SETTASKBUTTON:HIDE"
run (comanda)
E pronto:
A janela atual simplesmente some.
Fica só no gerenciador de tarefas.

É que tenho uma aplicação em WVW ela faz umas verificações em ftp e isso faz "parar" por alguns segundos. Então estou desenvolvendo uma q vai fica na "surdina" efetuando verificações. enviando e-mail e outros para "livrar" a principal para o uso.

Obrigado.
Mário (I)
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á

Função SETTASKBUTTON wapi semelhante no xharbour

Mensagem por Pablo César »

Mas na verdade nem precisaria do handle
Precisa sim. Senão como você vai retornar visível outra vez ? Ao menos na linha de comando, não dentro do programa.

Fiz este exemplo em anexo, só que está em modo gráfico. Não consegui fazer em modo console. Veja se isso te ajuda.
Anexos
demo1.rar
(579.16 KiB) Baixado 240 vezes
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.
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 »

Precisa sim. Senão como você vai retornar visível outra vez ? Ao menos na linha de comando, não dentro do programa.
Na verdade não precisarei ficar visivel outra vez . uma vez escondida a janela nao precisará mais voltar... Finalizarei o processo criando um arquivo sai.txt / e ele (o programa escondido) uma vez percebida a presença deste arquivo finalizar-se-á.

Mas foi muito bom o seu demo1.prg pois nele estava a função que eu precisava para não depender do WAPI.EXE para escondê-la.

Obrigado
:d
Responder