Domanda

Ho scritto un semplice programma che i ping tre siti e poi reagisce a se sono raggiungibili o meno.

La mia domanda è: posso sopprimere il sistema ( "ping") 's uscita? Ho scritto il mio codice in C ++ come so che lingua il meglio. Attualmente il codice apre il ping.exe esegue il comando di sistema. Se posso evitare che l'uscita dal presentarsi mentre ancora ping che sarebbe l'ideale.

Io sono alla fine andando a trasformare questo programma in un servizio di Windows è per questo che vorrei sopprimere sia la finestra della console riga di comando, così come eliminare l'output ping. Grazie.

È stato utile?

Soluzione

Prova a fare system("ping host > nul") (nul è Windows equivalente di /dev/null UNIX).

Altri suggerimenti

In generale, se avete intenzione di chiamare un altro programma, ma non ne vogliono sapere di agire come std::system, si sta andando ad avere bisogno di una funzione specifica per la piattaforma come fork() / exec() su UNIX o CreateProcess() su Windows. Queste funzioni permettono di controllare come gli altri programma viene eseguito, per esempio, che non mostra di uscita o non creano una finestra di console, ecc.

E 'possibile utilizzare il comando di sistema come qui di seguito per eliminare l'output del comando ping.

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

ping comando precedente indirizzo IP 100.100.100.100 e dirige l'output in un file chiamato response.dat. In response.dat si può vedere la risposta del comando ping.

sistema di Do ( "ping site.com> nul 2> nul"); e controllare il valore rendimenti shell. se il ping riesce, la shell restituirà 0, altrimenti restituirà 1. Vorrei essere più dettagliati, ma Vis Studio è la reinstallazione di sé. :)

C'è anche un modo per nascondere la finestra della console utilizzando l'API Win exec il comando, ma ... Non ricordo i dettagli.

Modifica: Sto ancora aspettando i MSVS processo di installazione, quindi ... :) Utilizzare CreateProcess con la bandiera DETACHED_PROCESS per le dwCreationFlags parametro per nascondere la finestra della console.

Dopo aver chiamato creare processo, dovrete utilizzare WaitForSingleObject sul manico processo per attendere il ping al completo. L'ultimo parametro a CreateProcess dovrebbe avere un puntatore a informazioni di processo che contiene l'handle di processo. (Assumendo CreateProcess ha avuto successo) È necessario attendere per il completamento del comando. Una volta che è completo, è possibile utilizzare l'handle di processo per ottenere il valore di ritorno, anche se sono troppo tempo contstrained di dirvi come fare a questo punto.

Quando si arriva oltre a Windows e chiamare CreateProcess ( ) , assicurarsi di impostare:

    lpStartupInfo->wShowWindow = SW_HIDE;

Questo farà sì che tutte le finestre create dal nuovo processo sono nascosti.

Uso della bandiera DETACHED_PROCESS impedirà il nuovo processo di ereditare console dell'applicazione, ma che non impedisce il nuovo processo dalla creazione di una nuova console. Non so cosa ping avrebbe fatto, ma migliore per rimuovere ogni dubbio utilizzando SW_HIDE.

Si potrebbe anche usare questo modo, questo restituirà l'output in un file e non si presenta una finestra di console e si blocca l'applicazione principale che è veramente utile. In primo luogo è necessario includere l'intestazione di Windows utilizzando;

#include <Windows.h>

quindi inviare un comando ping e scrivere l'output in un file come questo;

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

Questo invierà un comando ping a google.com e scrive l'output al file 'file.dat' nella directory del programma in esecuzione corrente. Così si potrebbe cambiare file.dat a qualsiasi file o percorso file che si desidera e, naturalmente, è possibile modificare il comando ping. I> mezzi di carattere che l'uscita delle esigenze di comando per essere scritto nel percorso del file dietro di esso. Se si desidera visualizzare la finestra della console e congelare l'applicazione durante l'esecuzione del comando ping è necessario utilizzare la seguente riga di codice al posto del codice WindExec ();

system("ping google.com > file.dat");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top