6

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) が含まれている場合は機能しません。GetWindowTextLength0 を返し、何も起こりません。

MessageBox.Show("Original message", "Caption", MessageBoxButtons.OK, MessageBoxIcon.Information);

私の最善の推測では、 の 3 番目および/または 4 番目のパラメーターFindWindowExを変更する必要がありますが、代わりに何を渡せばよいかわかりません。それとも、アイコンをスキップするために 2 番目のパラメータを変更する必要があるのでしょうか? よくわかりません。

4

2 に答える 2