gpt4 book ai didi

c# - 屏幕截图安全桌面

转载 作者:可可西里 更新时间:2023-11-01 08:11:25 25 4
gpt4 key购买 nike

我正在使用屏幕共享项目。我正在使用以下功能捕获桌面屏幕。它工作正常。但是每当 secure desktop prompting for elevation .它返回黑色/空白图像。

但是当我 turn off secured desktop来自本地安全策略。它工作正常。

有什么方法可以在不禁用本地安全策略的情况下捕获安全桌面。

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;
}

编辑:

  1. Exe 安装在安全位置
  2. Exe 已进行数字签名

最佳答案

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

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

要测试它,您可以例如使用 SysInternals PsExec tool在该模式下运行您的应用程序:

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

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

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

没有PsExec 的源代码,但您可以查看PAExec 工具的source code。 - 它是一种开源替代品。

关于c# - 屏幕截图安全桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52565941/

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