daldegam 0 Denunciar post Postado Abril 26, 2010 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
Beraldo 864 Denunciar post Postado Abril 26, 2010 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
_Isis_ 202 Denunciar post Postado Abril 26, 2010 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
daldegam 0 Denunciar post Postado Abril 26, 2010 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
Beraldo 864 Denunciar post Postado Abril 26, 2010 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
_Isis_ 202 Denunciar post Postado Abril 26, 2010 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
daldegam 0 Denunciar post Postado Abril 26, 2010 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
_Isis_ 202 Denunciar post Postado Abril 27, 2010 http://msdn.microsoft.com/en-us/library/96ayss4b.aspx Compartilhar este post Link para o post Compartilhar em outros sites
daldegam 0 Denunciar post Postado Abril 27, 2010 Consegui aqui! Vlws pessoal ;] Podem fechar o tópico; Compartilhar este post Link para o post Compartilhar em outros sites