Funções com API do Windows

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ções com API do Windows

Mensagem por Mário Isa »

Só mais essa vez Pablo.
Fiz as mudanças necessárias.
Agora vai funcionar.
Agradeço

Código: Selecionar todos

#include <hmg.ch>

#define GW_HWNDFIRST   0
#define GW_HWNDNEXT      2
#define GW_OWNER      4

Function Main()
//################# inserido por mim - a variável como é recebida como um parametro
Parameters como
//################# inserido por mim
Local aTitles := GetTitles( GetForegroundWindow() )

mytexto := estacao := estacnu := unitserver := ''


DebugMSG(aTitles)
Return

Function GetTitles( hOwnWnd )
Local aTasks := {}, cTitle := "", ;
   hWnd := GetWindow( hOwnWnd, GW_HWNDFIRST )        // Get the first window

//################# inserido por mim

mydir := directory('solicaux.t??')
cntarq := 1
while cntarq <= len(mydir)
 mytexto += mydir[cntarq,1]+crlf+memoread(mydir[cntarq,1])+crlf+crlf
 if getenv('USERDOMAIN')+'###'+getenv('USERNAME') $ memoread(mydir[cntarq,1])
  estacao := 'TERM'+ltri(str(val(subs(mydir[cntarq,1],11))))
  estacnu := subs(mydir[cntarq,1],11)
  unitserver := if ('UNITSERVER' $ memoread(mydir[cntarq,1]) , estacao , '' )
  exit
 end

 cntarq++
end
//################# inserido por mim

//################# inserido por mim - como = 'V' significa só as visíveis
if como = 'v'
//################# inserido por mim

Do While hWnd != 0                                   // Loop through all the windows
   cTitle := GetWindowText( hWnd )
   If GetWindow( hWnd, GW_OWNER ) = 0 .AND.;  // If it is an owner window
         IsWindowVisible( hWnd ) .AND.;     // If it is a visible window
         hWnd != hOwnWnd .AND.;             // If it is not this app
         !EMPTY( cTitle ) .AND.;            // If the window has a title
         !( "Prompt de comando" $ cTitle ) .AND.; // If it is not DOS session
         !( cTitle == "Program Manager" )   // If it is not the Program Manager
      aAdd( aTasks, { cTitle, hWnd } )
   Endif
   hWnd := GetWindow( hWnd, GW_HWNDNEXT )     // Get the next window
Enddo

//################# inserido por mim - como = 'i' significa só as invisíveis
elseif como = 'i'
//################# inserido por mim

Do While hWnd != 0                                   // Loop through all the windows
   cTitle := GetWindowText( hWnd )
   If GetWindow( hWnd, GW_OWNER ) = 0 .AND.;  // If it is an owner window
         hWnd != hOwnWnd .AND.;             // If it is not this app
         !EMPTY( cTitle ) .AND.;            // If the window has a title
         !( "Prompt de comando" $ cTitle ) .AND.; // If it is not DOS session
         !( cTitle == "Program Manager" )   // If it is not the Program Manager
      aAdd( aTasks, { cTitle, hWnd } )
   Endif
   hWnd := GetWindow( hWnd, GW_HWNDNEXT )     // Get the next window
Enddo

//################# inserido por mim
end
//################# inserido por mim

Return ( aTasks )

Function DebugMSG
Local i, aTemp := {}

//################# inserido por mim - definindo uma variável texto vazia
Local fll := ''   
//################# inserido por mim

For i := 1 to pcount()

//################# comentado por mim
    //aadd( aTemp, hb_PValue(i))
//################# comentado por mim

//################# inserido por mim -> adicionando na var texto o conteudo seguido de carriage return
    
 // Fll += aTemp, hb_PValue(i)+chr(13)+chr(10)
	Fll += hb_valtoexp(hb_PValue(i))+chr(13)+chr(10)
	
//################# inserido por mim

Next i

//################# comentado por mim
//MsgBox(hb_valtoexp(aTemp), "Helpful informations")
//################# comentado por mim

//################# inserido por mim --> gravando em um texto o conteudo da variavel
memowrit('qp.t'+estacnu,fll)
//################# inserido por mim
Return Nil
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ções com API do Windows

Mensagem por Mário Isa »

Diga-me Pablo
para compilar o hmb
eu instalei o hmg.3.0.46
ele construiu a pasta
c:\hmg.3.0.46
mas tenho que ter o harbour instalado ?
que versão ?
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ções com API do Windows

Mensagem por Pablo César »

Mário Isa escreveu:Diga-me Pablo
para compilar o hmb
eu instalei o hmg.3.0.46
Boa escolha, por causa do UNICODE.
ele construiu a pasta c:\hmg.3.0.46
mas tenho que ter o harbour instalado ?
Não, não precisa instalar mais nada. Só execute a IDE e carregue esse arquivo hbp na pasta onde ele estiver e pressione F5 ou a opção Executar do menu.
que versão ?
A versão que vem no c:\hmg.3.0.46 é Harbour 3.2.0dev (Rev. 18443)

E o aplicativo, deu certo ? Poste as suas novidades. Eu vi que criou o arquivo .t

Segue o anexo conforme a sua ultima solicitação.
Anexos
Teste74.rar
(753.61 KiB) Baixado 349 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ções com API do Windows

Mensagem por Mário Isa »

Alo Pablo tentei compilar conforme vc disse mas gerou o error.log abaixo

Código: Selecionar todos

hbmk2: Aten‡Æo: Arquivo nÆo encontrado:
       Documentos\Downloads\GetWinTit\teste2\Demo.hbp
hbmk2: Warning: Cannot find Documentos\Downloads\GetWinTit\teste2\Demo.hbc
Harbour 3.2.0dev (Rev. 18443)
Copyright (c) 1999-2012, http://harbour-project.org/
Cannot open D:\Meus.prg, assumed external

No code generated.
hbmk2: Erro: Executando o compilador Harbour (interno): 1
(C:\hmg.3.0.46\harbour\bin\harbour.exe) -n2 D:\Meus.prg D:\Meus.prg -q -oC:\Users\note1\AppData\Local\Temp\hbmk_0icvr3.dir\ -iC:\hmg.3.0.46\harbour\include -i. -iC:\hmg.3.0.46\include
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ções com API do Windows

Mensagem por Mário Isa »

ah! e o programinha agora funcionou certinho.
Se dou demo v ele grava as visiveis
se dou demo i ele " as invisiveis.
o estacnu é o número da estação no meu programa tipo 01 ou 02...
Obrigado pela força

Mário

:)Pos
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ções com API do Windows

Mensagem por Mário Isa »

Pablo a compilação já deu certo.
é porque o programa tava na pasta
d:\documentos\downloads\getwintit..................

e por causa dos nomes longos ele não reconhecia
daí movi a getwintit
para a raiz
e deu certo.

Obrigado..
Mário
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ções com API do Windows

Mensagem por Pablo César »

Legal. Então foi fácil a compilação pelo HMG ? Fico feliz em poder ter ajudado a mais um colega !
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ções com API do Windows

Mensagem por Mário Isa »

Alo Pablo
objetivando "melhorar" ainda mais o GetWinTitle

Vc teria alguma função que fizesse as vezes do comando (no caso da Wapi)

a) "WAPI -SETTASKBUTTON:HIDE" + <nHandle>

neste caso eu quero "esconder" a janela a q se refere o nHandle.


tá... então eu tendo o nHandle eu faria // tipo assim / no hmg

SetHideHandle(<nHandle>)

Claro que não é isso. Eu procurei no samples do hmg e n achei...

Obrigado.
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ções com API do Windows

Mensagem por Mário Isa »

Olá Pablo,
estou c omseguindo compilar todos os .prgs do tutorial / fazendo testes /

percebi q a hmg tb precisa de redesenho em caso de imagens ?

Mário
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ções com API do Windows

Mensagem por Pablo César »

Mário Isa escreveu:Olá Pablo,
estou c omseguindo compilar todos os .prgs do tutorial / fazendo testes
Isso é ótimo para aprender desde os exemplos.
percebi q a hmg tb precisa de redesenho em caso de imagens ?
Como assim ? As imagens, precisam ser criadas a gosto do programador. Mas tem algumas default que usa da própria HMG, como o CapLock, NumLock, etc
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ções com API do Windows

Mensagem por Mário Isa »

Mário Isa escreveu:
Vc teria alguma função que fizesse as vezes do comando (no caso da Wapi)

a) "WAPI -SETTASKBUTTON:HIDE" + <nHandle>
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ções com API do Windows

Mensagem por Mário Isa »

Alguém sabe dizer o problema com este código ?

Código: Selecionar todos

#include "hmg.ch"

Function Main

OpenTables()

    DEFINE WINDOW Win_1 ;
        AT 0,0 ;
        WIDTH 640 HEIGHT 480 ;
        TITLE 'Tutor 20: GRID Test' ;
        MAIN NOMAXIMIZE 

        DEFINE MAIN MENU 
            POPUP 'File'
                ITEM 'Set Grid RecNo' ACTION Win_1.Grid_1.Value := Val ( InputBox ('Set Grid RecNo','') )
                ITEM 'Get Grid RecNo' ACTION MsgInfo ( Str ( Win_1.Grid_1.RecNo ) )
                SEPARATOR
                ITEM 'Exit' ACTION Win_1.Release
            END POPUP
            POPUP 'Help'
                ITEM 'About' ACTION MsgInfo ("Tutor 20: GRID Test") 
            END POPUP
        END MENU

        @ 10,10 GRID Grid_1 ;
            WIDTH 610 ;
            HEIGHT 390 ; 
            HEADERS { 'Code' , 'First Name' , 'Last Name', 'Birth Date', 'Married' , 'Biography' } ;
            WIDTHS { 150 , 150 , 150 , 150 , 150 , 150 } ;
            ROWSOURCE "Test" ;
            COLUMNFIELDS { 'Code' , 'First' , 'Last' , 'Birth' , 'Married' , 'Bio' } ;
            COLUMNCONTROLS {{'TEXTBOX','NUMERIC','999'},{'TEXTBOX','CHARACTER'},{'TEXTBOX','CHARACTER'},{'TEXTBOX','DATE'},{'CHECKBOX'},{'TEXTBOX','CHARACTER'}};
            ALLOWDELETE ;
            EDIT

    END WINDOW

    CENTER WINDOW Win_1

    ACTIVATE WINDOW Win_1

Return Nil

Procedure OpenTables()
    Use Test
//    Win_1.Grid_1.RecNo := RecNo() 
Return Nil

Ocorre que qdo teclo enter -> editar ele trava e não me deixa sair.
:P
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ções com API do Windows

Mensagem por Pablo César »

Mário, tem nada de errado com esse código a não ser que na função OpenTables() está abrindo em modo EXCLUSIVO o arquivo. E você tenha aberto em algum outra instância. Mas aqui está executando normalmente as alterações pelo ENTER.
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ções com API do Windows

Mensagem por Mário Isa »

ok Pablo
Mas veja o meu pedido ali logo + acima..
Obrigado.
Mário
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ções com API do Windows

Mensagem por Pablo César »

Mário Isa escreveu:Mas veja o meu pedido ali logo + acima..
Desculpe, não vi a sua mensagem anterior. Ao invés de você postar duas mensagens seguidas, por quê você não edita a sua ultima mensagem adicionando o conteúdo da nova mensagem ?

Fiz a função em C e este prg que compilando dará certo para em substituição do SETTASKBUTTON do WAPI do Maligno, para esconder/mostrar janelas:

Código: Selecionar todos

// #include <hmg.ch>

REQUEST HB_GT_WIN_DEFAULT

Function Main(cWinHandle,cAcao)
Local nWinHandle

SetMode(25,80)
If cWinHandle=Nil .or. cAcao=Nil
   Alert("Deve informar os parametros.;Exemplo: DEMO 1111111 H")
   Quit
Endif
nWinHandle:=Val(cWinHandle)
If Upper(cAcao)="H"
   SetWinHide(nWinHandle)
Else
   SetWinShow(nWinHandle)
Endif
Return Nil

#pragma BEGINDUMP

#define SW_HIDE             0
#define SW_SHOWNORMAL       1
#define SW_NORMAL           1
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SW_FORCEMINIMIZE    11
#define SW_MAX              11

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SETWINHIDE )
{
   ShowWindow( (HWND) hb_parnl(1), SW_HIDE );
}

HB_FUNC( SETWINSHOW )
{
   ShowWindow( (HWND) hb_parnl(1), SW_SHOW );
}

#pragma ENDDUMP
Deve passar dois parâmetros: um para passar o numero do handle da janela e o outro "H" para esconder ou "S" para mostrar.
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