如何在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?