Question

J'ai écrit un programme simple qui pings trois sites et réagit ensuite à savoir si elles sont ou non accessibles.

Ma question est: puis-je supprimer le système ( "ping") de sortie? J'ai écrit mon code en C ++ comme je sais que le langage le mieux. Actuellement, le code ouvre la ping.exe exécutant la commande du système. Si je peux empêcher la sortie d'apparaître alors qu'il encore pings qui serait idéal.

Je suis finalement va tourner ce programme dans un service Windows qui est la raison pour laquelle je voudrais supprimer à la fois la fenêtre de la console de ligne de commande ainsi que supprimer la sortie de ping. Merci.

Était-ce utile?

La solution

Essayez de faire system("ping host > nul") (nul est équivalent fenêtres de /dev/null UNIX).

Autres conseils

En général, si vous allez appeler un autre programme, mais ne veulent pas d'agir comme std::system, vous allez avoir besoin d'une fonction spécifique à la plateforme comme fork() / exec() sous UNIX ou CreateProcess() sur Windows. Ces fonctions de contrôle vous donnent sur la façon dont les autres pistes, par exemple programme, qu'il ne montre la sortie ou non de créer une fenêtre de la console, etc.

Vous pouvez utiliser la commande système comme ci-dessous pour supprimer la sortie de la commande ping.

system("ping 100.100.100.100 > response.dat");

commande ci-dessus pings adresse IP 100.100.100.100 et dirige la sortie vers un fichier appelé response.dat. En response.dat vous pouvez voir la réponse de la commande ping.

Système Do ( "ping site.com> NUL 2> NUL"); et vérifier la valeur du rendement shell. si le ping réussit, le shell retourne 0, sinon il retournera 1. Je serais plus détaillée, mais Vis Studio est lui-même réinstallant. :)

Il y a aussi une façon de cacher la fenêtre de la console en utilisant l'API Win exec la commande, mais ... Je ne me rappelle pas les détails.

Edit: Je suis toujours en attente pour les MSVS installer processus, alors ... :) Utilisez CreateProcess avec le drapeau de DETACHED_PROCESS pour le dwCreationFlags paramètre pour masquer la fenêtre de la console.

Une fois que vous appelez processus de création, vous devrez utiliser WaitForSingleObject sur la poignée de processus d'attendre le ping complet. Le dernier paramètre à CreateProcess doit avoir un pointeur à l'information de processus qui contient la poignée de processus. (En supposant CreateProcess a réussi) Vous devez attendre que la commande complète. Une fois qu'il est terminé, vous pouvez utiliser la poignée de processus pour obtenir la valeur de retour, bien que je suis trop de temps contstrained pour vous dire comment le faire à ce stade.

Lorsque vous obtenez sur Windows et appelez CreateProcess ( ) , veillez à régler:

    lpStartupInfo->wShowWindow = SW_HIDE;

Cela garantira que toutes les fenêtres sont cachées créées par le nouveau processus.

Utilisation du drapeau DETACHED_PROCESS empêchera le nouveau processus héritant de la console de votre application, mais cela ne l'empêche pas le nouveau processus de création d'une nouvelle console. Je ne sais pas ce que ping ferait, mais mieux pour éliminer tout doute à l'aide SW_HIDE.

Vous pouvez également utiliser cette façon, cela retourne le résultat dans un fichier et ne présente pas une fenêtre de la console et gèle l'application principale qui est vraiment utile. Tout d'abord, vous devez inclure l'aide d'en-tête de Windows;

#include <Windows.h>

puis envoyer une commande ping et écrire la sortie dans un fichier comme celui-ci;

WinExec("ping google.com > file.dat", SW_HIDE); 

envoie une commande ping à google.com et écrit la sortie vers le fichier « file.dat » dans le répertoire de votre programme en cours en cours. Ainsi, vous pouvez changer file.dat à tout fichier ou filepath que vous voulez et bien sûr, vous pouvez changer la commande ping. Les moyens> de caractère que la sortie des besoins de commande à écrit dans le chemin du fichier derrière. Si vous voulez afficher la fenêtre de la console et geler l'application lors de l'exécution de la commande ping, vous devez utiliser la ligne de code suivante au lieu du code WindExec ();

system("ping google.com > file.dat");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top