Ir ao conteúdo
  • Cadastre-se

C++ Abrir qualquer programa especificado


Matheus Baroni

Posts recomendados

Estou tentando fazer com que o programa que o usuario colocar seja aberto automaticamente da seguinte forma:

<>system("start programa");


porém eu teria que especificar dependendo do programa por exemplo:

<>if (abrir == "chrome");

<>system("start chrome");

Teria um modo de eu fazer o meu programa se ajustar a isso? por exemplo, fazendo com que o que o usuario digite seja digitado dessa forma:

<>system("start programa");

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Matheus Baroni Não tenho conhecimento nessa linguagem específico, mas não seria o caso de criar uma função que recebe um parâmetro? No caso o nome do programa que deseja executar...

 

Algo do tipo:

void executar(String programa){
   system(start programa);
}

executar("chrome.exe"); //melhor por o caminho do programa inteiro...
executar("notepad.exe");

 

Como eu disse anteriormente, não sei como funciona nessa linguagem, mas isso é bastante comum na maioria das linguagens.. criar funções.

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

@DiF o que acontece é que o programa por enquanto roda no Prompt de comando do windows, então o que eu tenho que fazer é isso:
system("start programa");

Eu tenho que ja especificar o que o prompt vai escrever e queria justamente que ele soubesse lidar com diferentes programas.
No caso o Meu programa pergunta qual comando o usuario deseja executar e guarda ele no cin >>
Só que pra abrir o programa que o usuario deseja eu teria que fazer varios ifs ou switches para especificar cada programa existente.
Eu queria um jeito de fazer algo parecido com isso:
system("start" + programa);

Que no caso não tem funcionado no c++

Link para o comentário
Compartilhar em outros sites

@Matheus Baroni O protótipo de system() é esse:

int system (const char* command);

O único parâmetro é um ponteiro para um const char.

 

Não programo em C++ e nem uso system(), mas acho que algo simples assim deva funcionar (em C):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char str[201];
    char start[207];
    const char* comando;

    scanf("%200[^\n]", str);
    sprintf(start, "start %s", str);

    comando = start;
    system(comando);

    return 0;
}

Lemos uma string, mudamos para onde o ponteiro está apontando e chamamos system(). Em C++ não deve ser muito diferente...

Link para o comentário
Compartilhar em outros sites

 

Não há muita diferença entre esse comando
 

17 horas atrás, Matheus Baroni disse:

system("start programa");

 

ou esse 
 

	system("programa");


e esse:

 

	printf( "start programa" );

 

Trata-se apenas de uma função que recebe um char* como parâmetro.

 

Se precisa compor melhor o parâmetro a partir de valores digitados ou calculados o simples é usar sprintf().
 

 

3 horas atrás, Matheus Baroni disse:

No caso o Meu programa pergunta qual comando o usuario deseja executar e guarda ele no cin >>
Só que pra abrir o programa que o usuario deseja eu teria que fazer varios ifs ou switches para especificar cada programa existente.
Eu queria um jeito de fazer algo parecido com isso:
system("start" + programa);

Que no caso não tem funcionado no c++

 

Funciona assim, em C++ também. Trata-se apenas de uma função.

 

Mas entenda que

  • chamar system() para "rodar" um programa não quer dizer nada. system() apenas chama o interpretador de comandos do sistema e passa uma string. E retorna um int. Só isso. system() foi escrita em C, como no fundo o sistema todo foi. 
  • você --- seu programa --- não vai estar fazendo nada. É somo explicar um caminho para alguém. Abrindo o Maps do Google e digando a rota e depois mostrando o mapa como se fosse ideia sua. Não é.
  • se o usuário tem uma janela aberta para digitar um programa qual o propósito de, ao invés de simplesmente digitar o d1@b0 do comando e teclar ENTER,
    • digitar o nome de seu programa e talvez algum outro parâmetro
    • esperar o seu programa chamar system()
    • system() chamar o mesmo shell() e passar o retorno do programa
    • voltar para o seu programa que pode ou fazer algo antes de encerrar?
  • todos os programas que você roda são acionados assim. Por um clique ou um prompt. Se você tem um programa que identifica uma necessidade e abre um outro programa para resolver, aí sim está fazendo algo
  • um exemplo seria chamar o Excel ou o Planilhas do Google para fazer um cálculo ou mostrar um gráfico a partir de dados do seu programa. Para não somar nada talvez seja melhor não fazer nada mesmo.

De volta ao programa:

 

Use sprintf() para montar a string com os parâmetros de que precisa. Evite a todo custo usar system(). É insegura, inflexível e proibida em muitos ambientes. Imagine o risco de alguem interceptar uma chamada ou a própria system() e enviar qualquer coisa em seu nome, já que é o autor da "solução" e vai entender do que estou falando.

 

Se tem uma razão séria para rodar algo use CreateProcess() no Windows ou fork() exec() no Unix/Linux e derivados.. 

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

@arfneto No caso o programa não terá apenas a utilidade de abrir algo quando digitado, estou sim pensando em colocar de acordo com a necessidade como por exemplo: "Onde fica o Brasil?"

O programa abre o Google maps já com a pesquisa de Brasil.

Porém, estamos no início de um programa e essa é apenas uma funcionalidade básica.

Existe algum outro comando que faça o mesmo que system e seja mais seguro?

Você deu exemplos de comando que funcionam só pra Windows ou só pra linux, teria algum que funciona para os dois?

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Matheus Baroni disse:

Você deu exemplos de comando que funcionam só pra Windows ou só pra linux, teria algum que funciona para os dois?

 

Não.

1 hora atrás, Matheus Baroni disse:

O programa abre o Google maps já com a pesquisa de Brasil

 

Dependendo do programa que vai abrir pode passar isso como argumentos para o tal programa. Se não puder, pode usar automação: ativar o tal programa e enviar os comandos para a janela dele. Ou usar algo como COM era no Windows vinte anos atrás.

Link para o comentário
Compartilhar em outros sites

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...