将BM_CLICK消息发送到Windows 10应用程序不起作用

时间:2015-10-21 10:08:50

标签: c++ winapi automation findwindow

我有一个安装对话框(用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 个答案:

答案 0 :(得分:0)

最好使用按钮的ID发送WM_COMMAND,但如果Lang总是使用英语,那么你的工作方式也有效。但你的情况的问题是对话框上的按钮通常有一个“&”表示键盘快捷键,通常由系统隐藏,除非你按下alt键。 (比如菜单)。

所以:按钮的文字最有可能是“& cancel”