タイトルが示すように、プログラムで MessageBox のボタンクリックをシミュレートしようとしています。WM_CLOSE
以前、キャプションを介してハンドルを見つけ、またはSC_CLOSE
を適用して、MessageBox を閉じようとしましたSendMessage()
。ただし、はい/いいえボタンが存在するため、機能しませんでした (X ボタンはグレー表示されています)。
今、次のように[いいえ]ボタンをクリックしようとしています-:
List<IntPtr> result = new List<IntPtr>();
GCHandle listHandle = GCHandle.Alloc(result);
try
{
IntPtr Window_hWnd = CloseMessageBox.FindWindowByCaption("#32770", "LastQuestion"); //Could use null as the first argument too. "#32770" represents classname Dialog.
CloseMessageBox.EnumChildWindows(Window_hWnd, (hWnd, lParam) =>
{
StringBuilder sb = new StringBuilder();
foreach (var control in GCHandle.FromIntPtr(lParam).Target as List<IntPtr>)
{
CloseMessageBox.GetWindowText(control, sb, 250);
if (sb.Equals("&No"))
{
CloseMessageBox.PostMessage(hWnd, CloseMessageBox.MouseDown, 0, 0);
CloseMessageBox.PostMessage(hWnd, CloseMessageBox.MouseUp, 0, 0);
}
}
return false;
}, GCHandle.ToIntPtr(listHandle));
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
if (listHandle.IsAllocated)
listHandle.Free();
}
IRC の誰かのアドバイスでここまで来ましたが、以前のいくつかの編集で、ボタン ハンドル (「&Yes」ボタンのみ) を取得していましたが、すべてではありませんでした。その後、彼はこのアプローチを提案しましたが、control
リストにはデータが入力されていないため、foreach
. これを改善するにはどうすればよいですか?