私はこれを少しいじりましたが、完全な成功には至りませんでした。どのウィンドウがシークレット モードであるかを特定し、そこから技術的にプロセスを強制終了することができました。
ただし、実際のウィンドウを閉じるには、chrome 実行可能ファイルを強制終了する必要があるようです。残念ながら、すべての chrome ウィンドウが閉じてしまいます。
Windowsハンドルを使用してAlt-F4をシミュレートするSendKeysのようなものを取得できる場合があります。または、私が間違っていなければ、.Net 4.5には、試すことができる追加の終了ルーチンがいくつかあります。
それにもかかわらず、これはどのウィンドウがクロムで、どのウィンドウがシークレットかを判断するためのコードです。次に「kill」しますが、ウィンドウを閉じるのではなく、ブラウジングを終了するだけです (Chrome が言うように、Aw, Snap!)。
[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;
}