2010-03-25 2 views
5

가능한 중복 :
How do I send ctrl+c to a process in c#?C# : Process.Start()로 시작한 콘솔 프로그램에 Ctrl + C를 보냅니 까?

내가 외부 프로그램에 Ctrl 키 + 에게 C를 전송 시뮬레이션하는 방법을 알아낼 수 없습니다. 프로그램을 CMD를 통해 수동으로 실행할 때 Ctrl + c을 누르면 해당 프로그램이 완전히 종료되기 전에 저장할지 묻습니다. C#을 통해 이것을 시뮬레이트하려고하지만 작동하지 않는 것 같습니다.

// 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 

이 프로그램이 응답 그냥 계속하지 않습니다

이것은 내가 지금 뭐하는 거지입니다. 프로세스에 "중단"보냅니다 대신 콘솔에 Ctrl 키 + C을하고 Windows가 실제로 입력 스트림에 Ctrl 키 + C를 전송하지 않습니다 문제는, 그러나? 입력 스트림에 "\ x3"을 보내는 것이 콘솔에서 Ctrl + c을 누를 때 Windows가 수행하는 작업이라고 생각했습니다. 내가 잘못?

+0

당신의 콘솔은 아마'^ C '를 잡아서 프로그램에 어떤 종류의 신호를 보낼 것입니다. 당신은 그 행동을 모방 할 필요가 있습니다. Unixy 시스템에서는'SIGINT'가 될 것입니다. 윈도우에 관해서 많이 알지는 못합니다. –

+0

이것은 나의 이론 중 하나입니다. 나는 CMD가 내 프로그램에 보내는 Windows 용 CMD (ctrl + c가 아닌 경우)를 알지 못합니다. – johnrl

답변

0

이 질문은 이전에 내가 here에 대한 자세한 답변을 게시 한 경우에 응답되었습니다.

+0

그곳에있는 멋진 라이브러리이지만, 플랫폼에 독립적 인 뭔가가 필요합니다. 또한 실제로 전경 창뿐만 아니라 프로세스에 직접 키를 보낼 수 있어야합니다. – johnrl

+0

@Johnrl : 나는 그 도서관을 쓰지 않았다! :) 누군가 다른 사람이 썼습니다! :)하지만 테스트 장비에 링크로 표시되어 작동하는 것을 증명하고 프로세스에 직접 전송할 수 있습니다 ... 전경 창이 아닌 ... 창 핸들을 사용하여 그 핸들에 열쇠를 보내라! – t0mm13b

+0

문제는 모든 프로그램을 내 프로그램으로 리디렉션하기 때문에 시작 프로그램에 창이 없다는 것입니다. 따라서 창으로 키를 보내는 것은 작동하지 않습니다. – johnrl

관련 문제