使用C#仅关闭Google Chrome隐身窗口

我想创建一个小程序来关闭谷歌incogneto窗口。

我有代码杀死所有镀铬窗口,但我不知道如何隔离隐身窗口

现有代码:

Process[] proc = Process.GetProcessesByName("MyApp"); foreach (Process prs in proc) { prs.Kill(); } 

我玩了一下这个但没有取得圆满成功。 我能够确定哪些窗口是隐身的,从那里技术上杀死了这个过程。

但是,似乎必须杀死chrome可执行文件以关闭实际窗口,不幸的是关闭所有chrome窗口。

您可以使用Windows手柄来获取类似SendKeys的东西以模拟Alt-F4,或者如果我没有弄错,.Net 4.5还有一些额外的关闭例程,您可以尝试。

尽管如此,这里是确定哪些窗口是chrome以及哪些窗口是隐身的代码。 然后他们“杀死”,但它没有关闭窗口,只是杀死了浏览(Aw,Snap!就像Chrome所说的那样)。

  [DllImport("user32.dll")] static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); [DllImport("user32.dll")] static extern bool CloseWindow(IntPtr hWnd); [DllImport("user32")] private static extern bool SetForegroundWindow(IntPtr hwnd); public const int WM_SYSCOMMAND = 0x0112; public const int SC_CLOSE = 0xF060; private void button1_Click(object sender, EventArgs e) { var proc = Process.GetProcesses().OrderBy(x => x.ProcessName); foreach (Process prs in proc) if (prs.ProcessName == "chrome" && WmiTest(prs.Id)) { prs.Kill(); //To test SendKeys, not working, but gives you the idea //SetForegroundWindow(prs.Handle); //SendKeys.Send("%({F4})"); } } private bool WmiTest(int processId) { using (ManagementObjectSearcher mos = new ManagementObjectSearcher(string.Format("SELECT CommandLine FROM Win32_Process WHERE ProcessId = {0}", processId))) foreach (ManagementObject mo in mos.Get()) if (mo["CommandLine"].ToString().Contains("--disable-databases")) return true; return false; }