C# 在C中终止指定的任务而不是进程#
与Microsoft Word一样,如果我们打开多个Word窗口,则会发现它们位于一个名为WINWORD的进程下,该进程下有多个任务 在windows8.1pro的任务管理器中,我们可以右键单击它并通过结束任务结束它 我成功地用进程名完成了结束进程,但我无法从谷歌搜索中了解到在这种情况下如何在特定进程下完成终止特定任务 强调:我不是在问如何终止进程 进程[i].Kill() 更新 我成功地用删除指定的单词窗口C# 在C中终止指定的任务而不是进程#,c#,console-application,terminate,C#,Console Application,Terminate,与Microsoft Word一样,如果我们打开多个Word窗口,则会发现它们位于一个名为WINWORD的进程下,该进程下有多个任务 在windows8.1pro的任务管理器中,我们可以右键单击它并通过结束任务结束它 我成功地用进程名完成了结束进程,但我无法从谷歌搜索中了解到在这种情况下如何在特定进程下完成终止特定任务 强调:我不是在问如何终止进程 进程[i].Kill() 更新 我成功地用删除指定的单词窗口 using System; using System.Runtime.InteropS
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);
}
}
}
}
但我想知道,在这种情况下,我如何才能杀死最古老的单词窗口?如果进程可以对开始时间进行排序以杀死最早的一个。。。。但我认为这应该包括在另一个问题中,谢谢。从外观上看,如果应用程序有多个顶级窗口,即使它们都属于同一进程,任务管理器也会显示多个条目
当您单击“结束任务”时,任务管理器将向所选窗口发送一条消息。仅关闭一个窗口而不关闭其他窗口取决于您的应用程序。@Damien_the_unsiver,不,这不是可视分组。因为我检查了Process.GetProcesses()结果,即使打开了多少个Microsoft Word窗口,也始终只有一个WINWORD进程。您可以通过使用互操作类或非托管代码来实现这一点,例如任何用C#发送WM#U CLOSE消息的简单方法?我正在考虑如何让窗口句柄关闭指定的任务。我们可以从已知的窗口句柄获取任何窗口信息吗?感谢发送消息是通过调用Win32 API PostMessage(或者SendMessage,如果您想查看另一方是如何处理它的,那么您需要确保不要从UI线程执行此操作)来完成的。现在我将尝试一下,我发现我可以使用Spy++来获取句柄、标题(窗口名称),通过将其查找工具拖放到不同的可见窗口,我可以杀死它,但我想知道在不知道类名和窗口名的情况下如何杀死它。。。。