2015-10-21 1 views
1

У меня есть диалоговое окно установки (сделано с nsis), которое имеет две кнопки (установка и отмена). Я пытаюсь написать автоматизированные тесты для процесса установки с использованием низкоуровневого win32 api. Чтобы нажать на кнопку, я использую следующий код:Отправка сообщения BM_CLICK для приложения Windows 10 не работает

char windowName[] = "Desktop Application Setup"; 
char cancelButtonText[] = "Cancel"; 

HWND hWndMainWindow = NULL; 
HWND hButton = NULL; 

hWndMainWindow = FindWindow(NULL, windowName); 
if (hWndMainWindow) 
{ 
    hButton = FindWindowEx(hWndMainWindow, NULL, NULL, cancelButtonText); 
    if (hButton) 
    { 
     SendMessage(hButton, BM_CLICK, 0, 0); 
    } 
} 

В Windows 7 это работает отлично. В Windows 10 он просто ничего не делает. Он находит кнопку, она отправляет сообщение, но щелчка просто не происходит.

Это какая-то вещь безопасности, введенная в Windows 10? Это известная проблема?

+0

Вы собираетесь об этом неправильном пути. Не подделывайте ввод. Улучшите свой установщик, чтобы он мог принимать аргументы командной строки и выполнять автоматическую или бесшумную установку. –

+0

Прошу прощения. Теперь я понимаю, что мое описание неоднозначно. Я хотел сказать, что я пытаюсь написать автоматизированные тесты для процесса установки (имитирующие клики пользователей). Я отредактировал описание. – conectionist

+0

В этом случае используйте автоматизацию пользовательского интерфейса –

ответ

0

Лучше отправить WM_COMMAND с идентификатором кнопки, но способ, которым вы работаете, также работает, если Lang всегда на английском языке. но проблема с вашим случаем в том, что кнопки на диалоге обычно имеют «&», чтобы указать короткое замыкание на клавиатуре и, как правило, скрытые системой, если вы не нажмете клавишу alt. (например, меню).

так: текст кнопки, скорее всего, будет «& отменить»

Смежные вопросы