我有一個c#的.dll庫,它喜歡在啓動時彈出一個「歡迎」屏幕。 此屏幕在任務管理器中顯示爲應用程序。如何檢測從C#啓動的新應用程序?
是否有某種方式來自動檢測該應用程序/表格正在啓動和關閉它?
謝謝! :)
我有一個c#的.dll庫,它喜歡在啓動時彈出一個「歡迎」屏幕。 此屏幕在任務管理器中顯示爲應用程序。如何檢測從C#啓動的新應用程序?
是否有某種方式來自動檢測該應用程序/表格正在啓動和關閉它?
謝謝! :)
未由您自己的大會打開的表單。
foreach (Form form in Application.OpenForms)
if (form.GetType().Assembly != typeof(Program).Assembly)
form.Close();
什麼是你自己的大會是由類Program
定義,你也可以使用Assembly.GetExecutingAssembly
或Assembly.GetCallingAssembly
,但我不知道它會正確運行,如果運行Visual Studio中的應用程序(因爲它可能返回VS組件)。
它工作!目前我把它掛在一個計時器,並作出if(form.Text ==「歡迎」){form.Close(); }並關閉。 :)還有一件事,我如何檢測到一個新的表單正在打開,這樣我就可以在創建表單的時候運行這個表單,而不是通過定時器呢? :) – Roger 2011-03-11 11:14:24
在計時器上運行這不是很好,是的。您應該能夠追蹤表格打開的來源,然後直接關閉它。有可能獲得一個[回調錶單打開](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
這裏我們簡單的控制檯應用程序如果它是你的進程中運行,並打開一個表格(不是對話框),你可以使用這樣的事情,關閉所有將監控和關閉指定的窗口
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);
}
可能重複http://stackoverflow.com/questions/848618/net-events-for-process-executable-start – Terry 2011-03-11 10:35:08