2011-03-11 56 views
1

我有一個c#的.dll庫,它喜歡在啓動時彈出一個「歡迎」屏幕。 此屏幕在任務管理器中顯示爲應用程序。如何檢測從C#啓動的新應用程序?

是否有某種方式來自動檢測該應用程序/表格正在啓動和關閉它?

謝謝! :)

+0

可能重複http://stackoverflow.com/questions/848618/net-events-for-process-executable-start – Terry 2011-03-11 10:35:08

回答

3

未由您自己的大會打開的表單。

foreach (Form form in Application.OpenForms) 
    if (form.GetType().Assembly != typeof(Program).Assembly) 
     form.Close(); 

什麼是你自己的大會是由類Program定義,你也可以使用Assembly.GetExecutingAssemblyAssembly.GetCallingAssembly,但我不知道它會正確運行,如果運行Visual Studio中的應用程序(因爲它可能返回VS組件)。

+0

它工作!目前我把它掛在一個計時器,並作出if(form.Text ==「歡迎」){form.Close(); }並關閉。 :)還有一件事,我如何檢測到一個新的表單正在打開,這樣我就可以在創建表單的時候運行這個表單,而不是通過定時器呢? :) – Roger 2011-03-11 11:14:24

+0

在計時器上運行這不是很好,是的。您應該能夠追蹤表格打開的來源,然後直接關閉它。有可能獲得一個[回調錶單打開](http://stackoverflow.com/questions/1603600/winforms-is-there-a-way-to-be-informed-whenever-a-form-gets-gets-在我的應用程序中打開),但我認爲我之前嘗試過類似的東西,但它不起作用。 – xod 2011-03-11 12:09:07

3

這裏我們簡單的控制檯應用程序如果它是你的進程中運行,並打開一個表格(不是對話框),你可以使用這樣的事情,關閉所有將監控和關閉指定的窗口

class Program 
{ 
    static void Main(string[] args) 
    { 
     while(true) 
     { 
      FindAndKill("Welcome"); 
      Thread.Sleep(1000); 
     } 
    } 

    private static void FindAndKill(string caption) 
    { 
     Process[] processes = Process.GetProcesses(); 
     foreach (Process p in processes) 
     { 
      IntPtr pFoundWindow = p.MainWindowHandle;   
      StringBuilder windowText = new StringBuilder(256); 

      GetWindowText(pFoundWindow, windowText, windowText.Capacity); 
      if (windowText.ToString() == caption) 
      { 
       p.CloseMainWindow(); 
       Console.WriteLine("Excellent kill !!!"); 
      } 
     } 
    } 

    [DllImport("user32.dll", EntryPoint = "GetWindowText",ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)] 
    private static extern int GetWindowText(IntPtr hWnd,StringBuilder lpWindowText, int nMaxCount); 
} 
+1

Console.WriteLine(「MMMMMMONSTER KILL!」); = P – 2011-03-11 10:37:09

+0

MMMMMMONSTER KILL! :) *豎起大拇指* – Roger 2011-03-11 10:46:32

+0

感謝您的代碼,我會檢查出來!順便說一句,我應該添加user32.dll作爲參考? – Roger 2011-03-11 10:47:16

相關問題