gpt4 book ai didi

C++:在不禁用 UAC 的情况下截取 Windows 登录屏幕/UAC 提示

转载 作者:行者123 更新时间:2023-12-02 10:39:13 26 4
gpt4 key购买 nike

我一直在互联网上寻找答案,但似乎没有直接回答,所以我想我会问。

案例场景:我想截取当前在计算机屏幕上的内容。如果是 Windows 登录屏幕,我希望它是那样。如果它是事件用户的桌面,我想成为那个。如果用户提升了他们的应用程序,并且出现了 UAC 提示,我希望它就是这样。

根据大量阅读和反复试验,我目前的设置如下:

  • 程序作为 Windows 服务运行
  • 获取事件用户的 token
  • 使用用户的 token 运行 CreateProcessAsUser 以生成其自身的另一个实例
  • 截取屏幕截图并通过管道传回。

  • 现在这对于登录用户来说非常有用,除了启用 UAC 提示时屏幕截图是黑色的。

    此外,这种方法显然不适用于获取登录屏幕。

    从根本上说,我想知道 TeamViewer 究竟是如何实现这种目标的?它能够完美地在登录屏幕和用户 session 之间切换,同时还捕获 UAC 提示。我非常好奇它是如何做到这一点的。

    谢谢大家!

    最佳答案

    根据戴维森的建议,我已经想出了如何做到这一点,它涉及多个步骤。

    首先,必须使用 CreateProcessAsUser 在控制台 session 中创建一个进程(从 WTSGetActiveConsoleSessionId 获得)。需要注意的是,该进程必须具有管理权限,而仅仅获取用户 token 的句柄是行不通的。显然,解决这个问题的方法是获取以管理权限运行的进程的句柄,获取该进程的 token ,复制它,并将其与 CreateProcessAsUser 一起使用。我用于此的过程是 Winlogon。

    在此之后,剩下的就很简单了;使用 OpenInputDesktop 获取用户当前看到的桌面的句柄(对于实际桌面,它将是 Default,对于 UAC 提示和登录屏幕,它将是 Winlogon)。在此之后,使用 SetThreadDesktop 将进程的线程设置到适当的桌面,并捕获屏幕。假设您的进程有权创建 Winlogon 桌面的句柄,您将能够捕获登录屏幕/uac 提示和常规用户桌面。

    再次感谢戴维森,他为我指明了正确的方向。

    关于C++:在不禁用 UAC 的情况下截取 Windows 登录屏幕/UAC 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346426/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com