c# Process 发送Ctrl + C


        [DllImport("kernel32.dll")]
        static extern bool GenerateConsoleCtrlEvent(int dwCtrlEvent, int dwProcessGroupId);

        [DllImport("kernel32.dll")]
        static extern bool SetConsoleCtrlHandler(IntPtr handlerRoutine, bool add);

        [DllImport("kernel32.dll")]
        static extern bool AttachConsole(int dwProcessId);

     [DllImport("kernel32.dll", SetLastError = true)]
     public static extern bool FreeConsole();

        public void SendCtrlC()
        {
            
            FreeConsole();
            var attach = AttachConsole(process.Id);
            if (!attach)
            {
                return;
            }
            SetConsoleCtrlHandler(IntPtr.Zero, true);   //设置自己的ctrl+c处理,防止自己被终止
            var stopResult = GenerateConsoleCtrlEvent(0, 0); // 发送ctrl+c(注意:这是向所有共享该console的进程发送)

            if (!stopResult)
            {
                return;
            }
            Thread.Sleep(10);
            SetConsoleCtrlHandler(IntPtr.Zero, false);  //重置此参数
        }
posted @ 2025-03-05 22:35  Hey,Coder!  阅读(105)  评论(0)    收藏  举报