Я использую пространство имен System.Diagnostics.Process в C # для запуска системного процесса, иногда этот новый созданный процесс не запускается должным образом, в этих случаях Windows отображает окно с предупреждением, предоставляющее информацию о сбойном процессе. Мне нужен способ закрыть (убить) это окно предупреждений программно. Я попробовал следующий код, но он не работает, потому что окно предупреждения не появится в списке Process.GetProcesses ().
foreach (Process procR in Process.GetProcesses())
{
if (procR.MainWindowTitle.StartsWith("alert window text"))
{
procR.Kill();
continue;
}
}
Буду признателен за любую помощь в этом.
Спасибо!
UPDATE :
Просто хотел сообщить, что этот пример сработал для меня. Большое спасибо. Ниже приведен код, который может помочь кому-то еще. Код был протестирован с 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);
}
}
}