У меня есть диалог установки (сделанный с помощью 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? Это известная проблема?
Лучше отправить WM_COMMAND с идентификатором кнопки, но способ, которым вы работаете, работает также, если Lang всегда на английском языке. но проблема в вашем случае заключается в том, что кнопки в диалоге обычно имеют&»для обозначения сочетания клавиш, и обычно скрыты системой, если вы не нажмете клавишу Alt. (как меню).
итак: текст кнопки скорее всего будет&отменить»
Других решений пока нет …