続報で、UIオートメーションで良さげなコードがありました。
https://docs.microsoft.com/ja-jp/dotnet/framework/ui-automation/get-the-toggle-state-of-a-check-box-using-ui-automation
そのまま拝借して試してみましたが、快く動いてくれました。
C#で作ったFormとメモ帳の両方を試しました。
選択肢が増えて良かったです。
/// <summary>
/// Gets the toggle state of an element in the target application.
/// </summary>
/// <param name="element">The target element.</param>
private bool IsElementToggledOn(AutomationElement element)
{
if (element == null)
{
// TODO: Invalid parameter error handling.
return false;
}
Object objPattern;
TogglePattern togPattern;
if (true == element.TryGetCurrentPattern(TogglePattern.Pattern, out objPattern))
{
togPattern = objPattern as TogglePattern;
return togPattern.Current.ToggleState == ToggleState.On;
}
// TODO: Object doesn't support TogglePattern error handling.
return false;
}
private void button7_Click(object sender, EventArgs e)
{
hWndc = new IntPtr(0x000A059C);// 取りあえずダイレクトにハンドルを指定
AutomationElement AutoEle = AutomationElement.FromHandle(hWndc);
bool ss = IsElementToggledOn(AutoEle);
checkBox1.Checked = ss;
}