0

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

4

1 回答 1

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
            );
    }
}
于 2013-04-06T04:25:13.230 回答