2013-01-03 22 views
3

我想創建一個小程序來關閉Google incogneto窗口。僅使用C#關閉Google chrome隱身窗口

我的代碼要殺死所有Chrome窗口但林不知道如何隔離只是隱身窗口

現有代碼:

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

回答

4

我這個有點發揮各地,但沒有完成成功。我能夠確定哪些窗口是隱身窗口,並從那裏在技術上終止了這個過程。

但是,它似乎必須殺死chrome可執行文件才能關閉實際的窗口,不幸的是會關閉所有的窗口。

您可能能夠像SendKeys那樣使用Windows句柄來模擬Alt-F4,或者如果我沒有弄錯,.Net 4.5有一些額外的關閉例程可供您嘗試。

儘管如此,下面是確定哪些窗口是鑲邊的以及哪些是隱身的代碼。他們然後「殺死」,但它並沒有關閉窗口,只是殺死瀏覽器(如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; 
     } 
+0

我會看看感謝的人 – Crash893