控制台应用程序 - 在 C# 中终止指定任务而不是进程

本文关键字:任务 进程 终止 应用程序 控制台 | 更新日期: 2023-09-27 17:56:49

像Microsoft Word一样,如果我们打开多个Word窗口,那么我们会发现它们在一个名为WINWORD的进程中,其下有多个任务。

在Window 8.1 Pro的任务管理器中,我们可以右键单击它并通过结束任务结束它。

我成功地使用进程名称完成了最终进程,但我无法从Google搜索中获得任何想法,在这种情况下如何在某个进程下执行某些任务。

强调:我不是在问如何扼杀这个过程

流程[i].杀();

更新

我成功地杀死了指定的单词窗口

using System;
using System.Runtime.InteropServices;
namespace CloseTask
{
    class Program
    {
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName,string lpWindowName);
        [DllImport("user32.dll")]
        public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_CLOSE = 0xF060;
        static void Main(string[] args)
        {
            closeWindow();
        }
        private static void closeWindow()
        {
            // retrieve the handler of the window of Word
            // Class name, Window Name
            int iHandle = FindWindow("OpusApp", "Document1 - Microsoft Word");
            if (iHandle > 0)
            {
                //close the window using API
                SendMessage(iHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
            }
        }   
    }
}

但是我想知道在这种情况下如何杀死最古老的单词窗口?如果进程可以对开始时间进行排序以杀死最旧的一个....但我认为这应该包含在另一个问题中,谢谢。

控制台应用程序 - 在 C# 中终止指定任务而不是进程

好吧,从外观上看,如果您的应用程序具有多个顶级 Windows,即使它们都属于同一进程,任务管理器也会显示多个条目。

单击"结束任务"时,任务管理器会向所选窗口发送WM_CLOSE消息。由您的应用程序决定只关闭一个窗口,而不关闭其他窗口。