【问题标题】:Click Radio button from Win32 SendMessage单击 Win32 SendMessage 中的单选按钮
【发布时间】:2016-05-05 14:58:13
【问题描述】:

在 C# WPF 应用程序中,我尝试单击卸载屏幕上的单选按钮以单击一次应用程序。

有 2 个单选按钮

  • “将应用程序恢复到之前的状态。” (这个是检查的 默认)
  • “从这台计算机上删除应用程序。” (这是 一个我想被检查)。

使用一些 Win32 API,我找到了单选按钮的句柄,然后单击它。不幸的是,没有任何反应(单选按钮没有被选中)。附带说明一下,我已成功单击该窗口上的“确定”按钮。

我使用 Spy++ 检查手动单击单选按钮时传递了哪些消息,并将它们与我通过代码发送的消息进行比较(两者都是相同的)。

我从代码发送的 Spy++ 消息

<00001> 000D1136 S BM_SETCHECK fCheck:BST_CHECKED
<00002> 000D1136 R BM_SETCHECK

当我使用鼠标单击单选按钮时发送的 Spy++ 消息

<00099> 000D1136 S BM_SETCHECK fCheck:BST_CHECKED
<00100> 000D1136 R BM_SETCHECK

下面是我用来单击单选按钮的代码的 sn-p。

[DllImport("User32.Dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam);

private const int BST_CHECKED = 0x0001;
private const int BM_SETCHECK = 0x00F1;


public static void DoRadioButtonClick(IntPtr RadioButtonHandle)
{
    SendMessage(RadioButtonHandle, BM_SETCHECK, BST_CHECKED, IntPtr.Zero);
}

【问题讨论】:

  • 几个问题:您希望使用哪种技术应用程序自动化?例如,WinForms 应用程序不会对单选按钮的 BM_SETCHECK 做出反应。第 2 点:我猜你没有使用 BM_SETCHECK 单击 OK 按钮。第三点:你也可以使用 SendKeys() 来模拟键盘...
  • 我正在使用 WPF 应用程序,但是我不确定带有单选按钮的窗口是否是 WPF 应用程序(这是单击一次的一部分)。使用 SendMessage(ButtonHandle, BM_CLICK, IntPtr.Zero, IntPtr.Zero) 单击确定按钮。不确定如何使用 SendKeys,因为单选按钮没有焦点。
  • 使用 UI 自动化来自动化 UI

标签: c# click radio-button dllimport


【解决方案1】:

通过向单选按钮发送鼠标按下事件解决了问题。

SendMessage(RadioButtonHandle, 513, 0x00000001, 0x000d0026);

513 = 鼠标按下消息 不确定其他两个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多