サーバー上の提供されたアプリケーションを監視するための単純な C# アプリを作成しています。メッセージ ボックスに特定のウィンドウ名が表示された場合は、ウィンドウを閉じてプロセスを続行します。ベンダーは、情報メッセージ ボックスがランダムに表示され、X または OK ボタンがクリックされるまでアプリケーションをハングさせます。2 種類のメッセージ ボックスが表示され、1 つはアプリケーションを使用して問題なく閉じられますが、もう 1 つは閉じられません。どちらも非常によく似ており、メッセージの一部として SQL テキストが埋め込まれているだけです。どちらのメッセージ ボックスも FindWindow によって検出されます。SendMessage が実行されると、2 番目のタイプのメッセージ ボックスが表示されても閉じられません。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 によって閉じられる理由と、一部のメッセージボックスが閉じられない理由について何か間違ったことをしている場合は、本当に感謝しています。