Dziękuję za szybką odpowiedz
oczywiście widziałem te przykłady w googlu, ale to jakoś nie działa, są zamieszczone w moim kodzie.
Coś robię źle, może wkleję kawałki kodu.
proces uruchamiam w nowym wątku
Process exeProcess;
Thread thread;
StreamWriter sw;
public bool StartTest()
{
ExeName = @"ping.exe";
Arguments = "onet.pl -t";
run = true;
thread = new Thread(new ThreadStart(DebugThread));
thread.Start();
return true;
}
tu fragment nowego wątku (całość w załączniku)
private void DebugThread()
{
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;// false;
startInfo.UseShellExecute = false;
startInfo.FileName = ExeName;
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.Arguments = Arguments;
startInfo.WorkingDirectory = Path.GetDirectoryName(ExeName);
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardInput = true;
try
{
exeProcess = Process.Start(startInfo);
sw = exeProcess.StandardInput;
a następnie staram się wysłać Ctrl+C na kilka sposobów
GenerateConsoleCtrlEvent(ConsoleCtrlEvent.CTRL_C, exeProcess.SessionId);
GenerateConsoleCtrlEvent(ConsoleCtrlEvent.CTRL_C, 0);
UInt32 CommandCtrlC = 0;
bool result = GenerateConsoleCtrlEvent(CommandCtrlC, Convert.ToUInt32(exeProcess.Id));
const uint VK_CONTROL = 0x11;
const int VK_C = 0x43;
PostMessage(exeProcess.Handle, VK_CONTROL, VK_C, 0);
//przykład z linku googla nr2, tak go rozumiem, w dniu wczorajszym też podobny testowałem
string inputText = char.ConvertFromUtf32(3);
sw.WriteLine(inputText);
jedyne co działa to :
exeProcess.Kill();
jednak nie chcę zabijać procesu, chcę aby nadal istniał.
Nie napisałem dokładnie że chodzi gdb.exe bo przykład z pingiem też powinien być dobry.
Do gdb.exe należy wysłać ctrl+c aby zatrzymać uruchomiony program, ale potem można dać "continue"
Właśnie z tego powodu nie mogę dać "exeProcess.Kill();"
Wymienione przykłady przerobiłem, muszę popełniać jakiś błąd którego nie jestem zupełnie świadomy.
Jeśli ktoś uruchamia mój kod to gdy wyłączyć ten fragment
public void KillTest()
{
try
{
run = false;
StandardError = "";
StandardOutput = "";
//wyłącz exeProcess.Kill();
}
catch
{
}
}
po zamknięciu aplikacji ping pozostanie widoczny w uruchomionych aplikacjach do czasu ręcznego zabicia.
Gdyby dostał ctrl+c to przestał by działać.
Teraz jeszcze czytam i szukam i wymyśliłem że może wysyłanie do okna którego nie widać nie jest możliwe ?