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
。
我正在尝试从我的应用程序中关闭 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
。