thể trùng lặp:
How do I send ctrl+c to a process in c#?C#: gửi ctrl + c đến bàn điều khiển chương trình bắt đầu với Process.Start()?
tôi không thể tìm ra cách để mô phỏng gửi Ctrl +C đến một chương trình bên ngoài. Khi tôi chạy chương trình theo cách thủ công thông qua CMD, khi tôi bấm Ctrl + c nó sẽ hủy bỏ và hỏi tôi xem tôi có muốn lưu trước khi nó tắt hoàn toàn không. Tôi đang cố gắng để mô phỏng này thông qua C# nhưng nó dường như không hoạt động.
Đây là những gì tôi đang làm bây giờ:
// 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
Chương trình không đáp ứng với điều này và chỉ tiếp tục. Là vấn đề mà Windows thực sự không gửi Ctrl +C cho luồng dữ liệu đầu vào khi thực hiện Ctrl +c trong giao diện điều khiển, nhưng thay vào đó sẽ gửi một "gián đoạn" để quá trình này? Tôi nghĩ rằng việc gửi "\ x3" vào luồng đầu vào là CHÍNH XÁC những gì Windows thực hiện khi một lần nhấn Ctrl + c trong bảng điều khiển. Liệu tôi có sai?
Bảng điều khiển của bạn có thể đang bắt '^ C' và gửi tín hiệu về loại chương trình. Bạn cần mô phỏng hành vi đó; trên hệ thống Unixy, nó sẽ là 'SIGINT', tôi không biết nhiều về cửa sổ, tôi sợ. –
Đây cũng là một trong những lý thuyết của tôi. Tôi không biết những gì CMD trên Windows được gửi đến chương trình của tôi (nếu nó không phải là ctrl + c). – johnrl