我正在创建一个简单的 C# 应用程序来监视服务器上的销售应用程序,如果任何消息框出现特定的窗口名称以关闭窗口并继续该过程。供应商有随机出现的信息消息框,它会挂起应用程序,直到单击 X 或 OK 按钮。出现了两种类型的消息框,一种在使用我的应用程序时可以正常关闭,而另一种则没有。它们看起来都非常相似,只是其中一个嵌入了 sql 文本作为消息的一部分。FindWindow 找到了这两个消息框,它只是在 SendMessage 运行时它不会关闭第二种类型的消息框,即使它看到它也是如此。我也尝试过 PostMessage 并且遇到了同样的问题。
这就是我所拥有的:
private const int WM_CLOSE = 0x10;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
IntPtr ErrorPopUp = FindWindow(null, WindowToClose.Trim());
if (ErrorPopUp != IntPtr.Zero) {
try {
Thread.Sleep(200);
SendMessage(ErrorPopUp, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
_WMExceptionDal.LogErrorMsg(_WMException);
} catch (Exception ex) {
_WMException.txt_iferror = "Unable to close the popup window";
_WMException.txt_sqlerrtext = ex.ToString();
_WMExceptionDal.LogErrorMsg(_WMException);
}
}
其他方法的任何建议,或者如果我做错了什么,为什么某些消息框会被 WM_CLOSE 关闭,为什么有些不会我真的很感激。