【问题标题】:Is to possible to send clicks to all windows setup.exe installers (windows programs)是否可以将点击发送到所有 windows setup.exe 安装程序(windows 程序)
【发布时间】:2016-02-10 07:18:09
【问题描述】:

我试图在表面上实现的目标似乎相对简单:破解 Windows 安装程序以在没有任何用户输入的情况下运行。

不幸的是,我没有 msi,并且使用静默安装标签运行安装程序不会产生任何结果。我还研究过将 .exe 包装成 .msi,但会导致死胡同。

然后,我想既然安装程序毕竟是一个windows程序,也许我可以向它发送鼠标点击和键盘敲击。

但是,我做不到。简短的测试程序运行没有错误,但复选框仍未选中。

我用其他程序测试了这个方法并且它有效。我的猜测是,要使 SendMessage() 工作,必须构建应用程序来侦听和响应消息?

接下来,我想我可以使用 SendInput() 函数强制发送鼠标点击

int _tmain(int argc, _TCHAR* argv[])
{
    HWND handle = (HWND)0x008105CC;

    GetWindowRect(handle, &rec);

    double x = rec.left;
    double y = (rec.top + rec.bottom) / 2;

    LPARAM lparam = MAKELPARAM(x, y);

    SetCursorPos(x, y);

    INPUT input;
    input.type = INPUT_MOUSE;
    input.mi.dx = 0;
    input.mi.dy = 0;
    input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP);
    input.mi.mouseData = 0;
    input.mi.dwExtraInfo = NULL;
    input.mi.time = 0;

    SendInput(1, &input, sizeof(INPUT));

    return 0;
}

但是,那也失败了!再一次,我测试了在另一个应用程序中检查另一个复选框,它起作用了。所以,我很困惑为什么发送点击(我期望它会独立于特定程序进程)在所有程序中都不起作用???

【问题讨论】:

  • 在理想情况下,你会弄清楚安装程序做了什么,然后重新打包
  • 实际上在测试您是否正确地动态确定 HWND 时?
  • 另一个问题是如果安装程序运行提升,那么你需要运行你的程序提升(否则它将无法交互)。
  • 如果安装程序正在提升运行,UIPI 将阻止消息,除非安装程序明确允许消息通过(它可能不会这样做):“较低权限的进程不能:... - 将消息或 PostMessage 发送到更高权限的应用程序窗口。这些应用程序编程接口 (API) 会返回成功,但会默默地丢弃窗口消息。" 请参阅 Windows Integrity Mechanism Design
  • 话虽如此,您可以考虑改用 UI 自动化。因为你已经有了HWND,所以使用AccessibleObjectFromWindow() 来检索复选框的IAccessible 接口,然后调用它的accDoDefaultAction() 方法。复选框的“默认操作”是切换其复选标记的状态。

标签: winapi visual-c++ windows-installer


【解决方案1】:

我们使用AutoIt 来处理类似的事情:

AutoIt v3 是一种免费软件,类似于 BASIC 的脚本语言,旨在自动化 Windows GUI 和一般脚本。它使用模拟击键、鼠标移动和窗口/控件操作的组合,以便以其他语言(例如 VBScript 和 SendKeys)不可能或不可靠的方式自动执行任务。 AutoIt 也非常小,独立,可以在所有版本的 Windows 上开箱即用地运行,不需要烦人的“运行时”! AutoIt 最初是为 PC “推出”情况而设计的,以可靠地自动化和配置数千台 PC。随着时间的推移,它已经成为一种强大的语言,支持复杂的表达式、用户函数、循环以及资深脚本编写者所期望的所有其他内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多