2016-05-05 9 views
0

В приложении WPF для C# я пытаюсь щелкнуть переключатель на экране удаления для приложения с кликом после приложения.Нажмите кнопку «Радио» из Win32 SendMessage

Есть 2 кнопки радио

  • "Восстановить приложение в предыдущее состояние." (по умолчанию этот флажок установлен )
  • «Удалите приложение с этого компьютера». (это один, который я хочу проверить).

Используя некоторые API Win32, я нахожу дескриптор переключателя и затем его нажимаю. К сожалению, ничего не происходит (переключатель не проверяется). На боковой ноте в этом окне есть кнопка «ОК», которую я успешно нажал.

Я использовал Spy ++, чтобы проверить, какие сообщения передаются, когда я вручную нажимаю переключатель и сравниваю их с сообщениями, которые я отправляю по коду (оба одинаковы).

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); 
} 
+0

Несколько вопросов: с каким технологическим приложением вы хотите создать _automate_? Например, приложение WinForms не будет реагировать на BM_SETCHECK для радиокнопок. 2-й пункт: Думаю, вы не используете кнопку _click_ OK, используя BM_SETCHECK. 3-я точка: вы также можете имитировать клавиатуру с помощью SendKeys() ... –

+0

Я использую приложение WPF, однако я не уверен, что окно с включенным переключателем является приложением WPF (это часть клика один раз). Кнопка ok нажата с помощью SendMessage (ButtonHandle, BM_CLICK, IntPtr.Zero, IntPtr.Zero). Не уверен, как я буду использовать SendKeys, поскольку переключатель не имеет фокуса. – Scott

+0

Использование автоматизации пользовательского интерфейса для автоматизации пользовательского интерфейса –

ответ

1

Решение проблемы, отправив событие мыши на переключатель.

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

513 = MouseDown сообщение Не уверен в двух других значений.