我有一个用于c#的.dll库,它喜欢在启动时弹出“欢迎”屏幕。 此屏幕在任务管理器中显示为应用程序。
有没有办法自动检测正在启动的这个应用程序/表单并将其关闭?
谢谢! :)
答案 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.GetExecutingAssembly
或Assembly.GetCallingAssembly
,但我不确定它是否会正常运行,如果你运行Visual Studio中的应用程序(因为它可能会返回VS程序集)。