Отправка сообщения BM_CLICK в приложение Windows 10 не работает

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

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? Это известная проблема?

1 ответ

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

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

Другие вопросы по тегам