屏幕截图安全桌面

2024-04-04

我正在处理屏幕共享项目。我正在使用以下功能捕获桌面屏幕。它工作正常。但每当安全桌面提示提升 https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation.它返回黑色/空图像。

但是当我关闭安全桌面 https://www.thewindowsclub.com/how-to-turn-off-the-secure-desktop-in-windows-7来自本地安全策略。它工作正常。

有没有办法在不禁用本地安全策略的情况下捕获安全桌面。

static Bitmap CaptureDesktop()
{
    SIZE size;
    Bitmap printscreen = null;

    size.cx = Win32Stuff.GetSystemMetrics
                     (Win32Stuff.SM_CXSCREEN);

    size.cy = Win32Stuff.GetSystemMetrics
              (Win32Stuff.SM_CYSCREEN);

    int width = size.cx; int height = size.cy;

    IntPtr hWnd = Win32Stuff.GetDesktopWindow();
    IntPtr hDC = Win32Stuff.GetDC(hWnd);
    if (hDC != IntPtr.Zero)
    {
        IntPtr hMemDC = GDIStuff.CreateCompatibleDC(hDC);
        if (hMemDC != IntPtr.Zero)
        {
            IntPtr m_HBitmap = GDIStuff.CreateCompatibleBitmap(hDC, width, height);
            if (m_HBitmap != IntPtr.Zero)
            {
                IntPtr hOld = (IntPtr)GDIStuff.SelectObject(hMemDC, m_HBitmap);
                GDIStuff.BitBlt(hMemDC, 0, 0, width, height, hDC, 0, 0, GDIStuff.SRCCOPY);
                GDIStuff.SelectObject(hMemDC, hOld);
                GDIStuff.DeleteDC(hMemDC);
                printscreen = System.Drawing.Image.FromHbitmap(m_HBitmap);
                GDIStuff.DeleteObject(m_HBitmap);
            }
        }
    }
    Win32Stuff.ReleaseDC(hWnd, hDC);

    return printscreen;
}

Edit:

  1. Exe 安装在安全位置
  2. exe经过数字签名

为了获取安全桌面的屏幕内容,您的应用程序需要满足一些特殊条件:

  • 它必须在 SYSTEM 帐户下运行,而不是在登录用户帐户下运行
  • 它必须在 Winlogon 桌面上运行,而不是在用户桌面上
  • 它应该作为服务运行

要测试它,您可以例如使用SysInternals PsExec 工具 https://learn.microsoft.com/en-us/sysinternals/downloads/psexec以该模式运行您的应用程序:

PsExec /h /x /d /s "path_to\your_application.exe"

The /x and /s开关很重要:它们在 SYSTEM 帐户下和 Winlogon 桌面上运行该进程。

如果您想避免使用第三方工具,则需要创建自己的 Windows 服务来执行安全桌面的屏幕截图。

没有源代码PsExec可用,但你可以看看PAExec tool's 源代码 https://github.com/poweradminllc/PAExec- 这是一个开源替代方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

屏幕截图安全桌面 的相关文章

  • 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接 [重复]

    这个问题在这里已经有答案了 可能的重复 使用扩展方法表示的嵌套 from LINQ 查询 https stackoverflow com questions 9115675 nested from linq query expressed
  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • 如何填充两个样条线或直线系列之间的区域

    我有这个Chart 如何填充两个之间的区域Series S0 and S1 说蓝色和黄色Series 为此 我们编写了其中之一Paint事件 这里的ValueToPixelPosition https msdn microsoft com
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • Visual Studio Code 调试默认 ASP.NET Core MVC WebApp:不起作用

    我正在使用 Manjaro linux 并尝试调试默认的 ASP NET Core MVC 项目 但调试停止 没有任何错误 我创建了该项目 dotnet new mvc in a Meow文件夹 没什么特别的 然后添加了新的配置 NET C
  • 按值返回的函数的返回语句中的初始化

    我的问题源于深入研究std move in return语句 例如以下示例 struct A A std cout lt lt Constructed lt lt this lt lt std endl A A noexcept std c
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所

随机推荐

  • Magento 图片上传表单字段

    我跟着这个链接 http www magentocommerce com wiki 5 modules and development admin how to create pdf upload in backend for own mo
  • SQL Server 更新触发器,仅获取修改的字段

    我知道COLUMNS UPDATED 好吧 我需要一些快速的捷径 如果有人做了 我已经在做了 但如果有人可以节省我的时间 我会感激的 我基本上需要一个仅包含更新的列值的 XML 我需要它用于复制目的 SELECT FROM Insert 为
  • Jenkins 未识别 Maven

    我在Windows 8上安装了Tomcat 7 上面部署了Jenkins 我在 Jenkin 设置中配置了 JDK Ant 和 Maven 在 Maven 部分 我将名称命名为 LocalMaven 将 MAVEN HOME 命名为C Te
  • Postgres 正则表达式 负向前瞻

    场景 匹配除字符串 J01FA09 之外的任何以 J01 开头的字符串 我很困惑为什么以下代码不返回任何内容 SELECT 1 WHERE J01 FA09 J01FA10 当我能看到regexr com https regex101 co
  • fft 和小波

    我可以使用 fft 获取加载的 1 秒音频文件的频率 相位和幅度 并重新创建它 我现在想做的是找出每个频率在 1 秒音频文件中的开始位置和结束位置 并将数据放入数组中 示例 100hz 从 0 23 秒到 0 34 秒开始 104 34hz
  • 如何修复双编码 UTF8 字符(在 utf-8 表中)

    以前的一个LOAD DATA INFILE运行时假设 CSV 文件是latin1 编码 在此导入过程中 多字节字符被解释为两个单字符 然后 再次 使用 utf 8 进行编码 这种双重编码产生了异常 例如 代替 如何纠正这些字符串 以下 My
  • 在电子中创建多个预加载文件(每页一个)

    我正在创建我的第一个 Electron 应用程序 并且完成了表单的第一页 现在这个应用程序不是 SPA 所以我有大约 3 4 个不同的页面 并且页面通向另一个页面 为了允许正确的代码组织 我想为每个面向客户端的页面保留一个单独的预加载文件
  • 如何设置 NHibernate 事务的超时

    我需要在单个事务中完成大量数据库处理 包括使用 NHibernate 的一些处理 为了使所有内容在同一个事务中工作 我使用 NHibernate 的 Session 来启动它 并在其中登记其他工作的命令 一切都很顺利 直到我承诺为止 那时我
  • 停止无限循环中的delphi程序

    当 Delphi 中发生无限循环时 当我按下停止按钮时 调试器甚至不会给我堆栈跟踪 如果我怀疑程序在哪里停止 我可以放置一个断点 如果这是正确的无限循环 它将停止 下面是一个故意造成无限循环的示例程序 procedure TForm1 bt
  • Android 中的最大 BackStack 大小

    我是android开发的新手 我需要知道最大内存大小 of 后台堆栈 in android我想知道有多少活动 of 安卓应用 can be 存储在 BackStack 中 Thanks 后台堆栈的最大内存大小与设备上的可用内存量相同 您可以
  • 有 F#(或 C#)中的 R 树实现吗? [复制]

    这个问题在这里已经有答案了 可能的重复 是否有任何记录在案的 NET 的免费 R Tree 实现 https stackoverflow com questions 2041834 is there any documented free
  • 多行组并使用正则表达式进行搜索

    好的 正则表达式向导 我希望能够搜索我的日志文件并找到其中包含 错误 一词的任何会话 然后返回整个会话日志条目 我知道我可以使用字符串 数组来做到这一点 但我想学习如何使用正则表达式来做到这一点 但这就是问题 如果我决定使用正则表达式来做到
  • DataTables 固定标题与宽表中的列未对齐

    Problem 当使用sScrollX sScrollXInner and or sScrollY为了实现内部内容滚动的固定标题表格 在 Chrome 和 IE 中 表格的标题与正文的其余部分不对齐 另一方面 Firefox 可以完美地显示
  • 为什么堆比二叉树更好地表示优先级队列?

    在 最大 堆中 很容易找到最大的项目O 1 时间 但要真正删除它 你需要复杂性O log n 因此 如果从堆中插入和删除都是O log n 用堆来表示优先级队列比二叉树有什么优点 堆使用较少的内存 它们可以作为数组实现 因此没有存储指针的开
  • OpenFileDialog 切断预先填充的文件名[重复]

    这个问题在这里已经有答案了 我使用以下命令来显示 打开文件 对话框 OpenFileDialog fdlg new OpenFileDialog fdlg FileName Properties Settings Default Last
  • 如何使用 webpack 填充 Promise?

    我正在使用 webpack 来捆绑我的 JavaScript 我依赖于类似的模块popsicle https www npmjs com package popsicle哪个使用任何承诺 https www npmjs com packag
  • [ngModel] 和 (ngModelChange) 如何协同工作?

    我是 Angular 的新手 正在学习 Angular 6 我了解 ngModel 但当我尝试 ngModelChange 时 出现了一些问题 我有一个 html 元素 超文本标记语言
  • 在 heroku 上以沙箱模式运行 Rails 控制台

    在文档中找不到它 在SO上也找不到它 但是有没有办法在heroku Celadon Cedar 上以沙盒模式运行Rails 3 2 x 控制台 相当于 rails console sandbox 对于更 Heroku 方式 的替代方案 he
  • 使用 JQuery 和 Django 上传图像

    在继续阅读之前 请相信我 我已经阅读了有关此主题的所有其他帖子 但没有一个对您有帮助 我正在尝试向我的网站添加图像上传功能 我想上传图片 通过 ajax 帖子 我无法让这个工作 这是我所拥有的 HTML 我有一个特殊的设置 以便显示图像而不
  • 屏幕截图安全桌面

    我正在处理屏幕共享项目 我正在使用以下功能捕获桌面屏幕 它工作正常 但每当安全桌面提示提升 https learn microsoft com en us windows security threat protection securit