2010-03-25 12 views
5

Eventuali duplicati:
How do I send ctrl+c to a process in c#?C#: invia ctrl + c al programma della console avviato con Process.Start()?

io non riesco a capire come simulare l'invio di Ctrl +C ad un programma esterno. Quando eseguo il programma manualmente tramite CMD, quando preme Ctrl + c, si interrompe e mi chiede se voglio salvare prima che si chiuda completamente. Sto cercando di simulare questo attraverso C# ma non sembra funzionare.

Questo è quello che sto facendo ora:

// Create new process object 
process = new Process(); 

// Setup event handlers 
process.EnableRaisingEvents = true; 
process.OutputDataReceived += OutputDataReceivedEvent; 
process.ErrorDataReceived += ErrorDataReceivedEvent; 
process.Exited += ProgramExitedEvent; 

// Setup start info 
ProcessStartInfo psi = new ProcessStartInfo 
{ 
    FileName = ExePath, 
    UseShellExecute = false, // Must be false to redirect IO 
    RedirectStandardOutput = false, 
    RedirectStandardError = false, 
    RedirectStandardInput = true, 
    Arguments = arguments 
}; 

process.StartInfo = psi; 

// Start the program 
process.Start(); 

process.StandardInput.Write("\x3"); // 0x3 is Ctrl+C according to ASCII table 

Il programma non risponde a questa e solo continua. Il problema è che Windows in realtà non invia Ctrl +C al flusso in ingresso quando si fa Ctrl +c nella console, ma invece invia un "interrupt" per il processo? Ho pensato che l'invio di "\ x3" al flusso di input è ESATTAMENTE quello che fa Windows quando si preme Ctrl + c nella console. Ho sbagliato?

+0

La tua console sta probabilmente prendendo il '^ C' e sta inviando un segnale di qualche tipo al programma. È necessario emulare tale comportamento; sui sistemi Unix sarebbe 'SIGINT', non ne so molto di Windows, temo. –

+0

Questa è anche una delle mie teorie. Non so cosa CMD su Windows invii al mio programma (se non è ctrl + c). – johnrl

risposta

0

Questa domanda ha avuto risposta in una precedente occasione in cui ho pubblicato una risposta dettagliata su SO here.

+0

Questa è una bella libreria, ma ho davvero bisogno di qualcosa di più indipendente dalla piattaforma. Devo anche essere in grado di inviare effettivamente le chiavi direttamente al processo e non solo alla finestra in primo piano. – johnrl

+0

@Johnrl: Non ho scritto quella libreria! :) che è stato scritto da qualcun altro! :) ma l'ho incorporato in un banco di prova come mostrato nel link per dimostrare che funziona e può essere inviato direttamente al processo ... non solo qualsiasi finestra in primo piano ... ottenendo il manico della finestra, usa quello per manda le chiavi a quella maniglia! – t0mm13b

+0

Il problema è che il programma che avvio non ha una finestra da quando reindirizzo tutto il suo output nel mio programma. Pertanto l'invio di chiavi a Windows non funziona. – johnrl

Problemi correlati