Ir ao conteúdo
  • Cadastre-se

Executar Programa Externo


pedromss

Posts recomendados

Olá, gostaria de saber o comando para executar um arquivo externo utilizando a linguagem C.

Uso o ambiente Dev-C++ 4.9.9.2

O arquivo executável chama "siman" e está salvo em "C:\Arquivos de Programas\Teste"

Desde já agradeço

tente

#include <stdlib.h> // necessario
system("X:\\Caminho\\NOMEDOPROGRAMA.exe");

é necessario colocar 2 \ (barra) para representar uma \

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

tente

#include <stdlib.h> // necessario
system("X:\\Caminho\\NOMEDOPROGRAMA.exe");

é necessario colocar 2 \ (barra) para representar uma \

Rodei e nada aconteceu. Apareceu a seguinte mensagem:

'C:\\Arquivos' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá pedromss, o exemplo que nosso amigo Matheus Maldi citou acima funciona, porém ele abre uma tela preta do DOS além de executar o programa. Gostaria da resposta que não abrisse esta tela?

Olá Davi, pode abrir a tela sem problemas, mas tentei do jeito que ele passou e nada aconteceu. Apareceu a mensagem que coloquei no post acima.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Para executar um programa externamente com a API do Windows, use a função execve()!

Ela consiste em:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <unistd.h>
int main()
{
char *Local[]={"C:\\Arquivos de Programas\\Teste.exe",NULL};
execve("C:\\Arquivos de Programas\\Teste.exe",Local, NULL)
MessageBox(NULL,"Executado com sucesso! \n\n Poderá mudar esta mensagem!","Título!",MB_OK); // Mude aqui! ou retire esta função!
}

Espero ter ajudado! Caso ainda tenha dúvidas só perguntar.

OPA TINHA ESQUECIDO QUE TEM QUE USAR DOIS / FOI MAL COMPILA AGORA QUE FUNCIONA OK?

Ah, mais uma coisa, o exemplo que o Matheus passou funciona sim, mas você teria que substituir... digamos assim:

#include <stdlib.h>
int main()
{
system(call \"C:\\Arquivos de Programas\\Teste.exe\""); //Este é o system, que abre a tela preta!
}

Ah e TAMBÉM PENSEI QUE O NOME DO EXECUTÁVEL ERA TESTE.exe!

Mas Agora irá funcionar, compile isto! Está sem erro.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <unistd.h>
int main()
{
char *Local[]={"C:\\Arquivos de Programas\\Teste.exe",NULL};
execve("C:\\Arquivos de Programas\\Teste\\siman.exe",Local, NULL)
MessageBox(NULL,"Executado com sucesso! \n\n Poderá mudar esta mensagem!","Título!",MB_OK); // Mude aqui! ou retire esta função!
}

Mais uma coisinha: A função MessageBox() exibe uma mensagem na tela, caso queira saber mais sobre ela pergunte neste tópico mesmo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...

Oi, desculpe, mas tava vendo esse tópico porque estava procurando a mesma coisa.

Mas queria saber uma coisa, se no caso quando você abre esse programa X, e quando ele fechar esse executável do programa X, poderia fazer com que abra outro programa?

Meu caso, é um trabalho de escola, onde fizemos um jogo de quimíca no RPG Maker, e vai intercalar com um programa em ling C.

 

 

A historia no jogo é simples, onde você é um aluno, e no dia terá prova mas você não lembra muito bem o conteúdo da prova, e sai em busca de informações com as pessoas. Há pessoas que tem informações úteis quanto tem pessoas com informações inúteis. Quando o jogador acabar de achar as informações, ele poderá fazer a prova tranquilamente, aí é que abre o programa em ling C, onde será uma "pequena prova", onde o jogador responde ela, e recebe uma nota no final e enfim... 

 

(lembrando que meu problema não é com o rpg maker, e sim fazer um executavel pra abrir um programa x e quando o programa x fechar o programa z abrirá) 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

é que coloquei isso 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <unistd.h>
  5. #include <conio.h>
  6. int main()
  7. {
  8. char *Local[]={"C:\\Users\\Gorillazbrr\\Documents\\RPGXP\\O JOGO de QUIMICA\\Game.exe",NULL};
  9. char *B[]={"C:\\Users\\Gorillazbrr\\Desktop\\a prova final.exe",NULL};
  10. execve("C:\\Users\\Gorillazbrr\\Documents\\RPGXP\\O JOGO de QUIMICA\\Game.exe",Local, NULL);
  11. getch();
  12. execve("C:\\Users\\Gorillazbrr\\Desktop\\a prova final.exe",B,NULL);
  13. getch();
  14. }

Mas acaba executando somente o primeiro programa 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

alguém me ajuda?

eu usei o comando:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <unistd.h>
int main(){
char *Local[]={"E:\\script.exe",NULL};
execve("E:\\script.exe",Local, NULL);
}

para abrir um programa, mas ele só abre uma vez, eu queria abrir esse programa varias vezes.

se alguem puder me ajudar, porque eu só sei c++.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, Ck12 disse:

para abrir um programa, mas ele só abre uma vez, eu queria abrir esse programa varias vezes.

se alguem puder me ajudar, porque eu só sei c++

 

Não faz diferença. A família exec() ou CreateProcess() foi toda escrita em C até onde eu sei.

 

Não explicou o que significa "abrir várias vezes": pode ser uma sequência, podem ser todos ao mesmo tempo.

 

Para abrir em sequência use um loop. Para abrir todos ao mesmo tempo use threads. Para sincornizar use os mecanismos comuns: shared memory, semáforos, mutexes, ou as coisas fancy do C++20 como barriers ou conditional_variable. Em C++ é muito mais simples que em C. E pode usar os novos jthreads que são mais poderosos com os novos recursos de lock e join.

3 horas atrás, Ck12 disse:

para abrir um programa, mas ele só abre uma vez, eu queria abrir esse programa varias vezes.

se alguem puder me ajudar, porque eu só sei c++

 

Não faz diferença. A família exec() ou CreateProcess() foi toda escrita em C até onde eu sei.

 

Não explicou o que significa "abrir várias vezes": pode ser uma sequência, podem ser todos ao mesmo tempo.

 

Para abrir em sequência use um loop. Para abrir todos ao mesmo tempo use threads. Para sincornizar use os mecanismos comuns: shared memory, semáforos, mutexes, ou as coisas fancy do C++20 como barriers ou conditional_variable. Em C++ é muito mais simples que em C. E pode usar os novos jthreads que são mais poderosos com os novos recursos de lock e join.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!