如何在C#中关闭进程句柄

时间:2013-04-06 02:11:00

标签: c# process handle

我有一个有两个不同句柄的进程。我想根据其句柄ID关闭其中一个或另一个。有没有办法在c#中执行此操作。

1 个答案:

答案 0 :(得分:0)

使用此:

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