如何在Windows中使用C#杀死一个警报窗口?

我在C#中使用System.Diagnostics.Process命名空间来启动系统进程,有时这个新创建的进程无法正常启动,在这种情况下,Windows会显示一个警报窗口,提供有关失败进程的信息。 我需要一种以编程方式关闭(杀死)此警报窗口的方法。 我尝试了下面的代码,但它不起作用,因为警报窗口不会出现在Process.GetProcesses()列表中。

foreach (Process procR in Process.GetProcesses())
{
    if (procR.MainWindowTitle.StartsWith("alert window text"))
    {
        procR.Kill();
        continue;
    } 
} 

我将不胜感激任何帮助。 谢谢!

更新:只是想让你知道这个例子为我工作。 非常感谢你。 下面有一些代码可以帮助别人。 代码已经过Visual Studio 2008测试,您仍然需要一个winform和一个按钮才能使其工作。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
/* More info about Window Classes at http://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx */

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        const uint WM_CLOSE = 0x10;

        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);


        public Form1()
        {
            InitializeComponent();
        }

        /* This event will silently kill any alert dialog box */
        private void button2_Click(object sender, EventArgs e)
        {
            string dialogBoxText = "Rename File"; /* Windows would give you this alert when you try to set to files to the same name */
            IntPtr hwnd = FindWindow("#32770", dialogBoxText);
            SendMessage(hwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
        }

    }
}

您可以尝试使用PInvoke通过参数(如名称和/或窗口类)调用FindWindow()API,然后调用SendMessage(窗口,WM_CLOSE,0,0)API来关闭它。


正确,因为警报窗口(正确地称为消息框)不是应用程序的主窗口。

我想你必须使用EnumThreadWindows和GetWindowText来检查进程的窗口。

链接地址: http://www.djcxy.com/p/63597.html

上一篇: How to kill an alert window in Windows using C#?

下一篇: how to send control + L and control + C to another application?