首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#屏幕截图winlogon以及用户桌面

C#屏幕截图winlogon以及用户桌面
EN

Stack Overflow用户
提问于 2018-11-01 13:00:20
回答 1查看 1.1K关注 0票数 2

我正在与屏幕共享project.But工作,我遇到了捕捉安全桌面的麻烦。我已经问过相关的问题了,here也得到了答案

请通过上面的链接

就像dymanoid建议的那样。我使用PsExec exe来捕获安全的桌面/winlogon桌面,如下所示

/x和/s开关在系统帐户下和Winlogon桌面上运行进程。

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

现在screencapture exe作为系统帐户运行在winlogon桌面上,我可以在用户登录屏幕上看到screencapture exe,但在用户桌面屏幕上看不到。

现在事情发生了逆转,我能够捕获用户登录屏幕,而不是用户桌面。

用户桌面为我提供了空/黑屏幕。

如果我按照下面的命令删除/x,那么我就可以获得用户桌面而不是安全的桌面

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

我的问题是,有没有办法这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-04 10:30:01

因为我在工作,所以我无法检验我的理论。我还没有权利发表评论..。所以请容忍我,如果这不管用的话。

作为系统运行可能与它没有“桌面”目录有关。因此,请创建以下目录:

代码语言:javascript
复制
32-bit: %windir%\System32\config\systemprofile\desktop
64-bit: %windir%\SYSWOW64\config\systemprofile\desktop

再次尝试使用系统帐户:

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

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

PsExec -i -h -x -d -s -w c:\temp "path_\screencapture.exe“

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

查询会话

代码语言:javascript
复制
 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 -w c:\temp "path_\screencapture.exe“

PsExec -i 2 -h -x -d -s -w c:\temp "path_\screencapture.exe“

看看是否有什么不同的捕捉。

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

祝你好运:)

编辑:

我很幸运地测试了这个,这就是我所做的:

  1. 下载了gui的捕获工具,我尝试了7capture.com
  2. 然后我像这样开始了7capture.exe:

PsExec -i -s -x c:\7capture.exe

  1. 现在,我展示了一个安全的桌面,上面有"run“。当弹出窗口出现时,我按了ALT+TAB,有7 7capture :)
  2. 按“刷新”按钮查看项目列表。“桌面”在我的计算机上被称为"$$$Secure UAP后台窗口“。
  3. 瞧,捕获并可见

现在是Screenshot secure desktop上的代码

我会更改桌面HWND调用:

代码语言:javascript
复制
Win32Stuff.GetDesktopWindow();

到Enum函数,并为您在安全桌面中找到的每个HWND拍照。

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

代码语言:javascript
复制
[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“

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53101802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档