Diskuze: c# form - ukončení okna příkazového řádku
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
A proč pro otevření jednoho procesu to otevíráš skrze cmd? V ten moment je rodičovský proces CMD a je jasné, že při zavření cmd se zavřou i potomci.
Rovnou můžeš přeci nastartovat notepad z tvé aplikace
Taky mi není jasné, proč k otevření nějaké aplikace používáš CMD. Proč jednoduše nezavoláš
private void spustaplikaci(string aplikace_kterou_chci_spustit)
{
Process.Start("aplikace_kterou_chci_spustit");
}
to Petr Nymsa & Michal Štěpánek: spuštění toho notepadu byl jen
příklad Uživatel bude moc
zadat třeba příkaz ipconfig... Já jsem chtěl pokud se přes cmd otevře
nová aplikace tak aby se okno s cmd automaticky zavřelo.
to Petr Nymsa: To stím rodičovským oknem mi funguje nějak jinak, protože
pokud ve spuštěné aplikaci provedu spuštění notepadu přes cmd (mám tedy
spuštěny tři okna vlastní aplikaci, cmd a notepad) a následně křížkem
ukončím cmd tak notepad zůstane spuštěný.
Díky za pomoc a rady...
Spouštěl bych to s dalším parametrem, kterým zvolíš jestli se má příkaz provést v CMD nebo ne.
private void SpustAplikaci(string aplikace, bool cmd)
{
if (cmd)
Process.Start("cmd.exe", "/K " + aplikace);
else
Process.Start(aplikace);
}
Pak můžeš volat buď
SpustAplikaci("notepad", false);
Nebo
SpustAplikaci("ipconfig", true);
Po dlouhé odmlce jsem opět zpátky Tak jsem to nakonec vyřešil takto:
var procCMD = new Process(); // Novy proces
if (parametrCMD.Contains("exe"))
{
procCMD.StartInfo.FileName = parametrCMD; // Spustim jako aplikaci
}
else
{ // Pokud neobsahuje koncovku spoustim jako parametr cmd
procCMD.StartInfo.FileName = "cmd.exe"; // Spustim CMD
procCMD.StartInfo.Arguments = "/k " + parametrCMD; // Parametr se kterym se spusti CMD
}
procCMD.Start();
Díky za pomoc
Trošku bych to poupravil
if (parametrCMD.Contains(".exe"))
nebo tam dej
if (parametrCMD.endsWith("exe"))
protože ten soubor může "exe" obsahovat i v názvu...
Nevím zda jsi vyřešil to korektní ukončení okna cmd, pokud ne tak takhle to funguje bez problémů:
internal static class UnsafeNativeMethods
{
[DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int zprava, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string className, string windowName);
}
private void button1_Click(object sender, EventArgs e)
{
var process = new System.Diagnostics.Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c " + "notepad";
process.Start();
IntPtr hwnd = IntPtr.Zero;
for (;;)
{
hwnd = UnsafeNativeMethods.FindWindow("ConsoleWindowClass", null);
if (hwnd == IntPtr.Zero)
break;
UnsafeNativeMethods.SendMessage(hwnd, 0x0010 /*WM_CLOSE*/, IntPtr.Zero, IntPtr.Zero);
}
}
Radek Chalupa
www.radekchalupa.cz
Zobrazeno 10 zpráv z 10.