单击Win32 SendMessage中的单选按钮

时间:2016-05-05 14:58:13

标签: c# click radio-button dllimport

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

有2个单选按钮

  • “将应用程序恢复到以前的状态。” (这个被检查 默认情况下)
  • “从此计算机中删除该应用程序。” (这是 一个我想被检查。)

使用一些Win32 API我找到单选按钮的句柄,然后单击它。不幸的是没有任何事情发生(单选按钮没有被检查)。另外,在我已成功点击的窗口上有一个Ok按钮。

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

我从代码发送的间谍++消息

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

使用鼠标

单击单选按钮时发送的间谍++消息
<00099> 000D1136 S BM_SETCHECK fCheck:BST_CHECKED
<00100> 000D1136 R BM_SETCHECK

下面是我用来点击单选按钮的代码片段。

[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);
}

1 个答案:

答案 0 :(得分:1)

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

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

513 = MouseDown消息 不确定其他两个值。