1Danke
ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
337
337
EMPFEHLEN
-
Hallo,
da ich mich mit cmd besser auskenne als mit C++ frage ich komplexere
Informationen immer über einen cmd-befehl ab und bearbeite diese
Informationen dann intern.
Das funktioniert mitauch sehr gut.Code :1
popen()
Kleines Beispiel:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
char txt[MAX_PATH]; char psBuffer[MAX_PATH]; char out[MAX_PATH]; FILE *pPipe; //... strcat(txt, "echo %appdata%"); if( (pPipe = _popen( txt, "rt" )) != NULL ) { ShowWindow(FindWindow(NULL, "VilleichtTitelDesCmdFensters?"), SW_HIDE); while( !feof( pPipe ) ) { if( fgets( psBuffer, MAX_PATH, pPipe ) != NULL ) strcat(out, psBuffer); } } MessageBox(NULL, out, "Dein AppData-Pfad", MB_OK);
In diesem simplen Fall wäre natürlich viel einfacher:
...aber ist ja nur ein Beispiel...Code :1 2 3
char app[MAX_PATH]; //... GetEnvironmentVariable("APPDATA",app, sizeof(app));

Naja zurück zu meinem Problem:
Das alles FUNKTIONIET, allerdings gibt es bei meinen Usern immer
komische Rückmeldungen wenn neben der GUI immer kurz ein
Dos-Fenster aufblitzt.
Ich habe verschiedene Lösungsansätze gefunden:
Überund Fenster verstecken.Code :1
CreateProcess()
Problem:
Ich weiß das man so ein programm das gestartet wird
verstecken kann, aber kann man auch auslesen was das Programm zurückgibt?
Man könnte natürlich auch alles in eine Datei speichern
und die dann auslesen.
CMD:allerdings wäre das unprofessionell.echo %appdata% > datei.txt
Allgemein gefragt (auch für andere user mit ähnlichem Problem):
Gibt es eine Lösung ein Externes Programm
versteckt zu starten und ein Stream zum
lesen bzw. schreiben aufzubauen um
ausgaben bzw. eingaben zu tätigen?
Danke im voraus an jeden der sich das ganze überhaupt durchgelesen hat
Gruß RELAXGeändert von RELAX (17.10.11 um 14:49 Uhr)
-
Ich schreibe in solchen Fällen statt einer Console Anwendung einfach eine GUI Anwendung, lasse aber CreateWindow() ShowWindow() usw. weg.
Solange du die richtigen header includest und keine sichtbare Ausgabe brauchst, ergibt das das Selbe, mal abgesehen davon, dass du (unter Windows) für den Einsprung halt WinMain() brauchst.
-
17.10.11 08:24 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
@Thomasio: Ich glaube du hast das Problem nicht verstanden. Er / sie hat ein GUI Programm, allerdings werden Unterprogramme gestartet die eine Konsole öffnen.
Diese Art Schleife sollte man vermeiden. Sie ist fehleranfällig und unnötig kompiliziert:
Zitat von RELAX
Antwort auf die ursprüngliche Frage: Ja, es gibt eine Möglichkeit ein Programm zu starten ohne eine Konsole zu öffnen. Siehe z.B. http://support.microsoft.com/kb/190351
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Danke. Funktioniert Perfekt!
Ähnliche Themen
-
Richtige Syntax bei Operatorüberladung, wann sind "friend", "const", "&" nötig?
Von mrs_schokokeks im Forum C/C++Antworten: 4Letzter Beitrag: 25.08.10, 19:13 -
Klasse ohne feste Anzahl an Argumenten? und "unsave operations" vermeiden.
Von Nobody im Forum Java GrundlagenAntworten: 6Letzter Beitrag: 20.06.09, 12:12 -
"Vermeiden" einer Endlosschleife
Von frisbee im Forum C/C++Antworten: 1Letzter Beitrag: 02.09.07, 19:06 -
Transparentes "Grafik"-Fenster anstatt Win32-Fenster auf Desktop
Von thexray im Forum C/C++Antworten: 3Letzter Beitrag: 22.04.04, 17:53 -
pop up fenster mit "back" und "forward" button/leiste
Von Atti im Forum Javascript & AjaxAntworten: 12Letzter Beitrag: 26.02.02, 08:19





Zitieren
Login






