PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CMD like DOS-Fenster in XP/2k


kmf
2003-07-06, 16:20:58
Wer weiß eine Lösung, wie ich aus einem C-Programm heraus den Kommandointerpreter von 2K oder XP aufrufe, daß es so ist, als hätte ich über Start->Ausführen->CMD gestartet?

Exxtreme
2003-07-06, 16:40:35
system("c:\\winnt\\system32\\cmd.exe");

Alternativ dazu hilft die "WinExec"-Funktion.

Xmas
2003-07-06, 17:19:10
Original geschrieben von Exxtreme
system("c:\\winnt\\system32\\cmd.exe");
Schlechte Variante, weil es den Pfad C:\WinNT voraussetzt. Bei WinXP ist der Standardpfad aber C:\Windows. Besser ist es, einfach nur "cmd.exe" zu nehmen und Windows den Pfad suchen zu lassen.

stabilo_boss13
2003-07-06, 19:02:50
Oder du nimmst %windir%\system32\cmd.exe.

Nasenbaer
2003-07-06, 22:05:38
Original geschrieben von Exxtreme
system("c:\\winnt\\system32\\cmd.exe");

Alternativ dazu hilft die "WinExec"-Funktion.
Soll nicht ShellExecute statt WinExec genutzt werden da letztere austerben soll?

Mfg Nasenbaer

stabilo_boss13
2003-07-07, 08:24:16
Also ich benutze eigentlich immer CreateProcess: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp

kmf
2003-07-07, 21:35:58
Danke für die Hinweise, die kenne ich zum Teil selbst schon, außer CreateProcess und ShellExecute.

Das ist aber nicht das was ich suche. Das DOS-Fenster soll geöffnet bleiben. Nicht nur beim Programmaufruf kurz zucken und wieder zu Windows zurückkehren.

@ Exxtreme
Das mit dem Doppelbackslash funktioniert, nur wird dann das Programm nicht ausgeführt. DOS-Fenster bleibt aber offen.

Wie wird ShellExecute bzw. Winexec eingesetzt?

Habe nur den kostenlosen C++ 5.5 Compiler von Borland. Null Dokumentation.

stabilo_boss13
2003-07-07, 21:55:50
Das hat nichts mit den unterschiedlichen Apiaufrufen zu tun. Wenn die Konsole offen bleiben soll, musst du sie mit cmd.exe /K aufrufen.

kmf
2003-07-07, 21:57:15
Original geschrieben von stabilo_boss13
Das hat nichts mit den unterschiedlichen Apiaufrufen zu tun. Wenn die Konsole offen bleiben soll, musst du sie mit cmd.exe /K aufrufen.

Danke, werde ich versuchen.

[edit]
system ("%windir%\system32\cmd.exe /K"); funktioniert nicht bei mir.

Exxtreme
2003-07-07, 22:19:16
Original geschrieben von kmf
Danke, werde ich versuchen.

[edit]
system ("%windir%\system32\cmd.exe /K"); funktioniert nicht bei mir.
Mach Doppelbackslashs. ;)

Xmas
2003-07-07, 23:35:25
Original geschrieben von kmf
Das mit dem Doppelbackslash funktioniert, nur wird dann das Programm nicht ausgeführt. DOS-Fenster bleibt aber offen.
Öhm, welches Programm wird nicht ausgeführt?

kmf
2003-07-08, 20:17:43
Original geschrieben von Xmas
Öhm, welches Programm wird nicht ausgeführt?

Das Teil, das im am Programmieren bin.

Habe heute alle Szenarien durchgespielt. Aus dem Programm kann ich es nicht aufrufen. Das mit dem Doppelbackslash funktioniert zwar, aber nur bis zum Öffnen des Kommandointerpreters. Dann ist Schluß.
Wäre ja auch zu einfach gewesen. In einer Batch gehts auch nicht, auch nicht mit Doppelbackslash.

Einzig, wenn ich Tastaturabfrage mache, geht es, Das sieht aber bekloppt aus, wenn gleich zu Anfang eine Taste betätigt werden muß.

Mist, muß das Progrämmchen anders aufbauen.

Wo krieg ich einen C-Compiler für DOS her?

Habe selbst noch einen Originalcompiler auf 5 1/4" Disketten von Heimsoeth (das war früher der Distributor hier für Borland) :D

Hab kein Laufwerk mehr dafür.

Nasenbaer
2003-07-08, 20:22:25
Was willst du überhaupt programmieren? Was soll da am Anfang passieren? Kann deinen Ausführungen leider nicht folgen.

Mfg Nasenbaer

zeckensack
2003-07-12, 21:03:39
Original geschrieben von kmf
Wo krieg ich einen C-Compiler für DOS her?Brauchst du nicht :)

VC kann's, dann kann's Borland bestimmt auch. Leider kann ich dir die genaue Borland-Option nicht sagen, aber VC kann Programme kompilieren, die im Windows-DOS-Fenster (!=richtiges DOS) laufen. Bei VC erstellt mein dafür ein "Win32 Konsolen-Projekt", oder wählt "/subsystem:console" statt "/subsystem:windows".
Dann braucht man statt einer WinMain() eine main(). Wichtige Anmerkung: auch solche 'DOS-Programme' können Windows-Fenster erzeugen :)

PS: Habe grad' mal beim ollen Bruce Eckel nachgeschaut. Ein Programm mit Konsolenfenster erfordert wohl eine der folgenden Optionen:

bcc32 -w-inl -w-csu -wnak -c Dummy.cpp (Kompilieren)
bcc32 -eDummy.exe Dummy.obj (Linken)

kmf
2003-07-15, 14:14:36
Original geschrieben von zeckensack
Brauchst du nicht :)

VC kann's, dann kann's Borland bestimmt auch. Leider kann ich dir die genaue Borland-Option nicht sagen, aber VC kann Programme kompilieren, die im Windows-DOS-Fenster (!=richtiges DOS) laufen. Bei VC erstellt mein dafür ein "Win32 Konsolen-Projekt", oder wählt "/subsystem:console" statt "/subsystem:windows".
Dann braucht man statt einer WinMain() eine main(). Wichtige Anmerkung: auch solche 'DOS-Programme' können Windows-Fenster erzeugen :)

PS: Habe grad' mal beim ollen Bruce Eckel nachgeschaut. Ein Programm mit Konsolenfenster erfordert wohl eine der folgenden Optionen:

bcc32 -w-inl -w-csu -wnak -c Dummy.cpp (Kompilieren)
bcc32 -eDummy.exe Dummy.obj (Linken)

Vielmals merci, das ist es. :)