C#截图winlogon以及用户桌面

我正在使用屏幕共享项目。但我遇到了捕获安全桌面的麻烦。 我已经在这里提出相关问题并得到了答案

请通过以上链接

正如dymanoid所暗示的那样。 我正在使用PsExec exe来捕获安全的桌面/ winlogon桌面,如下所示

/ x和/ s开关在SYSTEM帐户和Winlogon桌面下运行该进程。

PsExec / i / h / x / d / s“path_ \ screencapture.exe”

现在screencapture exe在winlogon桌面上作为SYSTEM帐户运行,我能够在用户登录屏幕上看到screencapture exe,但在用户桌面屏幕上看不到。

现在反过来我能够捕获用户登录屏幕而不是用户桌面。

用户桌面给我空/黑屏。

如果我从命令中删除/ x如下所示,我可以得到userdesktop不安全的桌面

PsExec / i / h / d / s“path_ \ screencapture.exe”

我的问题是,有没有办法做到这一点

自从我上class以来,我无法测试我的理论。 +我还没有评论的权利……所以请耐心等待,如果这不起作用。

作为系统运行可能与它没有“桌面”目录有关。 所以请创建这些目录:

 32-bit: %windir%\System32\config\systemprofile\desktop 64-bit: %windir%\SYSWOW64\config\systemprofile\desktop 

使用SYSTEM帐户再试一次:

PsExec -i -h -x -d -s“path_ \ screencapture.exe”

有时工作目录是“只读”,因此通过指定您可以使其工作

PsExec -i -h -x -d -s -wc:\ temp“path_ \ screencapture.exe”

如果这不起作用,请尝试将其附加到会话,查询可用的用户会话以查看安全桌面是否正在运行其自己的会话名称,i命令提示符输入:

查询会话

  SESSIONNAME USERNAME ID STATE TYPE DEVICE services 0 Disc >console xxxx 2 Active rdp-tcp 65536 Listen 

我这里唯一可用的会话是services = 0和mylogin = 2。

我建议试试

PsExec -i 0 -h -x -d -s -wc:\ temp“path_ \ screencapture.exe”

要么

PsExec -i 2 -h -x -d -s -wc:\ temp“path_ \ screencapture.exe”

并查看捕获中是否存在任何差异。

我之前从未使用过安全桌面,所以它可能是一个额外的层。 在用户情况下,-i对我来说一直很好。

祝好运 :)

编辑:
我用运气测试了这个,这就是我做的:

  1. 用gui下载了一个捕获工具,我尝试了7capture.com

  2. 然后我像这样启动了7capture.exe:

PsExec -i -s -xc:\ 7capture.exe

  1. 现在我展示了安全桌面上的“以管理员身份运行”。 当弹出窗口出现时,我推ALT + TAB并且有7个捕获:)

  2. 按“刷新”按钮查看项目列表。 “桌面”在我的计算机上称为“$$$ Secure UAP Background window”。

  3. Voila,捕捉和可见

现在为截图安全桌面上的代码

我会更改桌面HWND调用:

 Win32Stuff.GetDesktopWindow(); 

到Enumfunction并拍摄安全桌面中找到的每个HWND。

未经测试,但我相信你可以使用这个:

 [DllImport("user32.dll")] private static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam); // Delegate to filter which windows to include public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); 

尝试一下,看看你是否可以让它适用于所有场景。

EDIT2:
由于这些是两个不同的用户范围,因此您需要运行两个Screencapture.exe副本。 一个用于安全桌面,一个用于交互式会话:UAC:

PsExec -i -h -x -d -s“path_ \ screencapture.exe”

没有UAC:

PsExec -i -h -d“path_ \ screencapture.exe”