【发布时间】:2023-03-20 00:03:01
【问题描述】:
我正在尝试使用以下代码来按下我的其他应用程序上的按钮:
HWND ButtonHandle;
if( (wnd = FindWindow(0, "Do you want to save?")) )
{
ButtonHandle = FindWindowEx(wnd, 0, "SaveButton", "&Save");
SendMessage(wnd, WM_COMMAND, MAKEWORD(GetDlgCtrlID(ButtonHandle), BN_CLICKED ), (LPARAM)ButtonHandle);
}
它不起作用。我尝试将不同的句柄传递给 MAKEWORD 并更改 WPARM 和 LPARAM 但没有。
关于如何单击另一个应用程序窗口上的按钮的任何想法?
感谢代码。 谢谢。
编辑: 它似乎没有工作权限的原因。我发送了一个 PostMessage(),结果是 GetLastError() = 5 错误(或拒绝访问)。 有什么想法吗?
EDIT2 我并不是要粗鲁,但请拜托,我已经搜索了所有 API,包括获取和设置按钮的区域,然后发送一个按钮向下和按钮向上,得到控制 ID,获得类 ID 和更多。 我首先在这里问这个问题的原因是因为我已经在互联网上用尽了我的搜索。 如果您知道答案PLEASE POST CODE,请不要建议 API,仅此而已,请告诉我该 API 如何解决问题。这并不难。 谢谢。
编辑 3:问题的答案是在赏金完成后自动选择的。这个问题仍然没有答案。
【问题讨论】:
-
这适用于哪个版本的 windows?
-
可能不相关,但我建议您以管理员身份运行程序或在管理员模式下运行 Visual Studio 并尝试是否可行。这也是我在 PostMessage 文档中看到的:Microsoft Windows Vista然后。当消息被 UIPI 阻止时,使用 GetLastError 检索的最后一个错误设置为 5(拒绝访问)。
-
这是在 Vista 还是 7 中?它在XP中工作吗? (从 Microsoft 下载要在 Virtual PC 中运行的映像并进行测试。)您是否尝试过使用 sendkeys?
-
咕。这就是为什么所有图形应用程序也应该有 CLI 的原因。像 DBUS 这样的东西就更好了。
-
鉴于按钮具有非标准按钮类,它可能不会将 WM_COMMAND 发送到其父级。它甚至可能不支持 Active Accessibility。所以建议使用
SendInput发送鼠标事件可能是你最好的选择。