WM_CLOSE 消息似乎没有关闭 chrome

WM_CLOSE message does not seem to close chrome

我正在尝试从我的应用程序中关闭 chrome。

我正在使用以下方法:

public class CloseChrome 
{

    static int WM_CLOSE = 0x0010;
    static int WM_QUIT = 0x0012;



    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);



    static public void closeCrome()
    {

        var process = Process.GetProcesses();

        foreach (var item in process)
        {
            if (item.ProcessName.Contains("chrome"))
            {
                //item.Kill();

                int ret = SendMessage(item.Handle, WM_CLOSE, 0, 0);
                Console.WriteLine("Chrome Reply: " + a);
            }

        }
    }
}

使用 kill 方法会终止 chrome 进程,但是当我发送 WM_CLOSE 消息时,即使来自 sendMessage 的 return 值为 0,也没有任何反应。我是不是做错了什么 chrome 只是忽略了我的请求?

Process.Handle 将是进程的 HANDLE,而不是主 window 的 HWND。事实上,一个进程可以拥有许多 windows,因此 main window 的概念并不适用。

你需要做的是调用(相当于csharp)EnumWindows然后调用GetWindowProcessThreadId来测试每个HWND,看看它是否属于你的目标进程。

更常用的替代方法是使用 Spy++ 检查目标 window 以查看 class 名称是否非常独特,如果是,您可以使用 FindWindow