MessageBox
キャプションとテキストに基づいて表示される場合は、特定のものを閉じようとしています。MessageBox
アイコンがない場合でも機能します。
IntPtr handle = FindWindowByCaption(IntPtr.Zero, "Caption");
if (handle == IntPtr.Zero)
return;
//Get the Text window handle
IntPtr txtHandle = FindWindowEx(handle, IntPtr.Zero, "Static", null);
int len = GetWindowTextLength(txtHandle);
//Get the text
StringBuilder sb = new StringBuilder(len + 1);
GetWindowText(txtHandle, sb, len + 1);
//close the messagebox
if (sb.ToString() == "Original message")
{
SendMessage(new HandleRef(null, handle), WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
}
上記のコードは、次のように がアイコンなしMessageBox
で表示されている場合に問題なく動作します。
MessageBox.Show("Original message", "Caption");
ただし、次のようなアイコン (からMessageBoxIcon
) が含まれている場合は機能しません。GetWindowTextLength
0 を返し、何も起こりません。
MessageBox.Show("Original message", "Caption", MessageBoxButtons.OK, MessageBoxIcon.Information);
私の最善の推測では、 の 3 番目および/または 4 番目のパラメーターFindWindowEx
を変更する必要がありますが、代わりに何を渡せばよいかわかりません。それとも、アイコンをスキップするために 2 番目のパラメータを変更する必要があるのでしょうか? よくわかりません。