【问题标题】:Kill Specified Task instead of Process in C#在 C# 中杀死指定的任务而不是进程
【发布时间】:2015-09-03 18:50:44
【问题描述】:

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

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

我成功地用进程名称完成了结束进程,但我无法从谷歌搜索中得到任何关于在这种情况下如何在特定进程下执行终止特定任务的想法。

强调:我不是在问如何杀死进程

进程[i].Kill();

更新

我成功杀死了指定的Word窗口

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);
            }
        }   
    }
}

但我想知道在这种情况下如何杀死 oldest Word Window?如果进程可以对 StartTime 进行排序以杀死最旧的......但我认为这应该包含在另一个问题中,谢谢。

【问题讨论】:

  • @Damien_The_Unbeliever ,不,这不是视觉分组。因为我检查了 Process.GetProcesses() 结果,即使打开了多少 Microsoft Word 窗口,也始终只有一个 WINWORD 进程。
  • 您可以通过使用 Interop 类或非托管代码(例如 codeproject.com/KB/shell/…)来完成此操作

标签: c# console-application terminate


【解决方案1】:

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

当您单击结束任务时,任务管理器将WM_CLOSE message 发送到所选窗口。只关闭一个窗口而不关闭其他窗口取决于您的应用程序。

【讨论】:

  • 在 C# 中发送 WM_CLOSE 消息的任何简单方法?我在想如何让窗口句柄关闭指定的任务。我们可以从已知的窗口句柄中获取任何窗口信息吗?谢谢
  • 发送消息是通过调用 Win32 API PostMessage 来完成的(如果你想看看对方是如何处理它的,或者是 SendMessage,但是你需要确保不要从你的 UI 线程中这样做)
  • 我现在试一试,我发现我可以使用 Spy++ 通过将它的 Finder 工具拖放到不同的可见窗口来获取句柄、标题(窗口名称)、类名
  • 我可以杀死它,但我想知道如何在不知道类名和窗口名称的情况下杀死它....
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
相关资源
最近更新 更多