如何检测从C#启动的新应用程序?

时间:2011-03-11 10:32:33

标签: c#

我有一个用于c#的.dll库,它喜欢在启动时弹出“欢迎”屏幕。 此屏幕在任务管理器中显示为应用程序。

有没有办法自动检测正在启动的这个应用程序/表单并将其关闭?

谢谢! :)

2 个答案:

答案 0 :(得分: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 :(得分:3)

如果它在你的进程中运行并打开一个Form(而不是一个Dialog),你可以使用这样的东西来关闭你自己的程序集没有打开的所有表单。

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

你自己的大会是由班级Program定义的,你也可以使用Assembly.GetExecutingAssemblyAssembly.GetCallingAssembly,但我不确定它是否会正常运行,如果你运行Visual Studio中的应用程序(因为它可能会返回VS程序集)。