Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

daldegam

[Resolvido] Abrir .exe e guardar valor retornado em uma variavel.

Recommended Posts

Olá!

 

Estou com uma duvida simples que não encontrei uma maneira de fazer em c++...

 

Por exemplo, tenho um programa: abc.exe

Esse programa tem um botão: [ Prioridade ]

 

Ao clicar nesse botão, um novo exe é aberto. (pop.exe)

Esse pop.exe retorna uma lista como resultado.

Por exemplo:

C:\Users\Daldegam>dir

O volume na unidade C é 1[PT1]

O Número de Série do Volume é EA2F-DB08

 

Pasta de C:\Users\Daldegam

 

09/04/2010 01:21 <DIR> .

09/04/2010 01:21 <DIR> ..

10/03/2010 23:58 0 .javafx_eula_accepted

10/03/2010 23:58 16 .javafx_ping_sent

23/02/2010 19:13 <DIR> Contacts

09/04/2010 01:21 <DIR> Debug_TS

.....

23/02/2010 19:13 <DIR> Videos

2 arquivo(s) 16 bytes

14 pasta(s) 116.617.408.512 bytes disponíveis

No caso eu executei o DIR e ele me retornou alguns valores...

A mesma coisa acontece com o meu pop.exe...

 

Preciso que ao clicar no botão: [ Prioridade ]

Ele abra o pop.exe (Se possivel em segundo plano) e guarda o valor retornado em uma variavel.

Pode ser string ou char...

 

Abraços!

Vlws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

quanto a clicar em botão não sei como solucionar, mas voce pode pegar o retorno de um comnado/programa usando a função popen(). ela executa um comando e armaxzna o retorno num FILE* para ser tratado como um stream comum de arquivo texto

Compartilhar este post


Link para o post
Compartilhar em outros sites

P/ você definir um valor em outro programa você tem que usar pipes (comunicação entre processos).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não é esse o caso...

 

Por exemplo:

A função CreateProcess (http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx)

BOOL WINAPI CreateProcess(

__in_opt LPCTSTR lpApplicationName,

__inout_opt LPTSTR lpCommandLine,

__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,

__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,

__in BOOL bInheritHandles,

__in DWORD dwCreationFlags,

__in_opt LPVOID lpEnvironment,

__in_opt LPCTSTR lpCurrentDirectory,

__in LPSTARTUPINFO lpStartupInfo,

__out LPPROCESS_INFORMATION lpProcessInformation

);

 

Esse botão é apenas um exemplo que dei...

O sistema na realidade nao funciona assim... ele vai abrir o exe em uma determinada ação que já está pronta nele...

Só falta esse codigo para conseguir retornar o que ele mostrou...

O pop.exe executa uma função (coisa de 1 segundo no maximo) retorna um valor como se fosse o exemplo do DIR acima...

Só preciso gravar esse valor retornado em uma variavel...

 

Se quiserem fazer um source de exemplo assim:

- Um executavel do DOS.

- Ao abrir esse executavel, na função main() mesmo ele abre o processo/comando DIR do sistema.

- Ao ser executado ele grava o valor retornado do DIR em uma variavel. Tipo: char result[2000] (só exemplo).

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou você não entendeu o que popen() faz ou você não está conseguindo expressar o que quer fazer

 

voce afirmou de novo que quer salvar, por exemplo, o retoreno de DIR num char*. Com popen() voce resolve isso. Ela retorna FILE*. Aí voce trata esse ponteiro como se fosse um ponteiro para arquivo texto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se são dois .exe diferentes são dois espaços de endereçamento diferentes. A não ser que você consiga ultrapassar a proteção imposta pelo kernel, você não pode escrever na área do outro programa.

Arquivos, sockets, fila de mensagens, pipes, memória compartilhada, passagem de mensagens (mailslot), arquivos mapeados em memória...Tudo isso serve p/ comunicação entre processos.

 

http://msdn.microsoft.com/en-us/library/aa366551%28VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/ms681674%28v=VS.85%29.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andei procurando sobre o popen()..

Não encontrei muita coisa sobre ele... nem no site http://www.cplusplus.com/ mostra algo que ajude...

Fui fazer um teste compilando um codigo que achei de exemplo na net e deu:

error C2065: 'popen' : undeclared identifier

Essa função funciona no windows ou é só pra linux?

 

-----

 

Vou dar uma olhada sobre o que a _Isis_ disse agora...

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.