Página 1 de 2

Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 11:22
por sygecom
Buenas Pessoal,
Será que alguém sabe se tem como pegar uma variável definida por outro EXE ?
Explico melhor, tenho um EXE compilado com Harbour( por que apenas com harbour consigo me comunicar com portas seriais através do RDP) que faz comunicação serial com balanças eletrônicas e uso troca de arquivos TXT para me comunicar com meu EXE Principal que é compilado com xHarbour(por causa do SQLRDD) então eu estava procurando alguma solução para deixar de usar essas trocas de arquivos TXT, será que existe alguma maneira de definir uma variável em um EXE meu que possa enxergar no meu outro EXE.

Leonardo Machado

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 12:12
por asimoes
Leonardo,

Se for executado em uma mesma máquina eu estudaria o uso de clipboard.

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 12:55
por sygecom
Puxaaaaaa, muito boa, alias ótima idéia. vou fazer isso agora, depois volto dizendo se deu certo.

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 14:15
por Euclides
É Leonardo, o clipboard pode ser uma boa ideia, mas tem que ser ligeiro... porque se o operador ´fizer´um Ctrl-C...
Eu estudaria um meio de utilizar arquivos .INI
... meus 1 cents...
T+, Euclides

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 14:21
por sygecom
Olá Euclides,
Agradeço a dica, mas INI seria a mesma coisa que já uso hoje com arquivo TXT, eu estava mesmo querendo deixar de usar esse modo TXT, mas mesmo assim agradeço.

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 15:05
por asimoes
Olá Leonardo,

Fiz o teste com estes 2 programas e funcionou o primeiro faz o clipboard da hora e o segundo pega o conteúdo do clipboard
Você pode fazer um controle com tags no programa que envia e recebe do clipboard para ter certeza do dado que você deseja receber.
Programa que envia

Código: Selecionar todos

#include "hbgtinfo.ch"
FUNCTION Main
   CLS
   K:=0
   for i:=1 to 60     
      Hb_GtInfo( HB_GTI_CLIPBOARDDATA, '['+Time()+']' )
      inkey(1)
   next
RETURN
Programa que recebe(Le)

Código: Selecionar todos

#include "hbgtinfo.ch"
FUNCTION Main
   CLS
   K:=0
   DO WHILE K<>27
      cClip:=Hb_GtInfo( HB_GTI_CLIPBOARDDATA )
      IF LEFT(cClip,1) == '[' .AND. RIGHT(cClip,1)==']'
         @10,00 SAY cClip
      ENDIF
      K:=INKEY(0.5)
   ENDDO
RETURN

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 15:39
por sygecom
Testei em modo console e deu certo, mas quando coloco a Hwgui junto não retorna, alias nem preenche e nem retorna, vou ver o que pode está acontecendo, vlw pela dica.

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 16:41
por sygecom
Asimões com essa sua LUZ que foi mais um OLOFOTE consegui resolver o dilema, e com mais a LUZ da dica abaixo do Basso, tudo saiu perfeito como deveria ficar, muitoooooooo obrigado e se eu poder ajudar em algo é só prender o grito.

cTextClip := GETCLIPBOARDTEXT() // pega da area de transferência

COPYSTRINGTOCLIPBOARD( cText ) // envia para a area de transferência

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 17:31
por asimoes
Sygecom,

Muito bom, o exemplo será bastante apreciado pelos nossos colegas que estejam precisando de algo semelhante.

[]´s

Re: Pegar um variável definida por outro EXE

Enviado: 19 Fev 2010 17:56
por rochinha
Amiguinho,

Voce usa aplicativos em 32bits, não seria ideal, voce usar outro método de comunicação como o DDE.

Se voce ainda tem o Fivewin, de uma olhada nos exemplos dele e porte para a GUI que voce esta usando.

Voce pode usar o DDE normal ou DDE de Rede onde a diferença é como voce chama(por nomes) a parte cliente e a parte servidor.

Ou talvez uma comunicação por sockets onde voce pode enviar uma string de dados e do outro lado obter e interpretá-las.

Re: Pegar um variável definida por outro EXE

Enviado: 20 Fev 2010 16:59
por sygecom
Buenas Rocnhinha,
Eu até dei uma olhada no DDE no WIKI da Fivewin, porem meu aplicativo não usa Fivewin e sim Hwgui, mas agradeço sua dica, e vou guardar aqui para caso eu precise de algo mais complexo acho que vale a pena dar uma estudada em DDE e Sockets.
Links abaixo do DDE
http://wiki.fivetechsoft.com/doku.php?i ... que_es_dde
http://wiki.fivetechsoft.com/doku.php?i ... anejar_dde

Re: Pegar um variável definida por outro EXE

Enviado: 21 Mar 2010 09:35
por clodoaldomonteiro
Olá amigos!
Tava pesquisando alguma coisa o assunto em questão e tenho tb uma dica, que é o uso dos arquivos .MEM

Código: Selecionar todos

SAVE TO (ArquivoMEM) ALL LIKE drv*   // grava configuracoes,
REST FROM (ArquivoMEM) ADDI                // restaura configuracoes gravadas
A vantagem é que podemos guardar várias Variáveis de Memória, entre strings, numerics, logics, etc., e se o Ctrl+C for pressionado no meio do caminho, não atrapalhará as variáveis.
Você poderia guardar por exemplo:

Código: Selecionar todos

VarUsuario:='clodoaldo'
VarMaquina:='192.168.1.1'
VarNivel:='Administrador'
A desvantagem é que o comando SAVE limita em guardar apenas 10 caracters do nome de suas variáveis, ou seja, se vc tiver usando uma variável com o nome MinhaVariavel ele gardará MinhaVaria, ainda não corrigiram isso no xHarbour.

Re: Pegar um variável definida por outro EXE

Enviado: 21 Mar 2010 10:15
por sygecom
Olá Clodoaldo,
Isso para mim seria quase que a mesma coisa que gravar em um TXT ou INI, meu problema em usar desse modo seria o local onde ficaria esses arquivos, no meu caso onde está um EXE é na maquina local que acessou o TS e outro dentro do TS, e acabariam não se enxergando os MEM um pelo outro, a não ser que eu configure cada maquina de cada cliente meu que se tornaria inviável, no modo de usar a AREA DE TRANSFERENCIA ficou bem pratico e rápido, e para o usuário dar um CTRL+C eu resolvi travando o teclado em um EXE e libero pelo outro EXE e mesmo assim isso acho que nem era necessário por que leva 300 milésimos de segundos entre copiar e colar, é muito rápido, são apenas 7byts que vão para a memória.

Re: Pegar um variável definida por outro EXE

Enviado: 21 Mar 2010 10:50
por Maligno
Uma forma alternativa de trocar informações entre janelas é justamente a forma mais natural de comunicação no Windows. Este SO é totalmente orientado a mensagens e pode-se trocar mensagens entre as janelas usando a faixa de códigos existente para usuários. Eu uso MDI no Windows e controlo janelas por esse modo, que foi feito exatamente para isso. Se interessar, pesquise no MSDN por PostMessage(), SendMessage(), etc.

Ademais, acho que, apesar de ser válido e funcionar relativamente bem, o Clipboard não foi feito pra troca de informações entre aplicações. Acho que o melhor é utilizar a ferramenta mais apropriada.

Re: Pegar um variável definida por outro EXE

Enviado: 21 Mar 2010 11:30
por clodoaldomonteiro
Malígno!

De acordo com a sua informação eu teria que usar alguma função para executar seu exemplo, mais ou menos assim:

Código: Selecionar todos

DLLCall("WINMM.DLL",32,"sndPlaySoundA", "c:\windows\media\Windows Shutdown.wav", 0 ) //chama fun‡Æo dentro de uma dll, para rodar som
... ou seria de outra forma?