c#中如何关闭进程句柄

本文关键字:关闭进程句柄 | 更新日期: 2023-09-27 18:07:35

我有一个有两个不同句柄的进程。我想关闭一个或另一个基于他们的句柄ID。在c#中有办法做到这一点吗?

c#中如何关闭进程句柄

使用

public partial class TestClass {
    [DllImport("user32.dll")]
    static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
    public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam);
    public static void TestMethod() {
        var targetName="AcroRd32.exe";
        var processArray=(
            from process in Process.GetProcesses()
            let moduleName=(new Func<Process, String>(x => {
                try {
                    return x.MainModule.ModuleName;
                }
                catch(Win32Exception e) {
                    return default(String);
                }
            }))(process)
            where null!=moduleName
            where 0==String.Compare(targetName, moduleName, true)
            select process).ToArray();
        EnumWindows(
            (hwnd, lParam) => {
                foreach(var process in processArray)
                    if(process.MainWindowHandle==hwnd)
                        return !process.CloseMainWindow();
                return true;
            },
            IntPtr.Zero
            );
    }
}