由于我在工作,我无法测试我的理论。 + 我还没有评论的权利……所以如果这不起作用,请多多包涵。
作为系统运行可能与它没有“桌面”目录有关。
所以请创建一个这些目录:
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 -w c:\temp "path_\screencapture.exe"
如果这不起作用,请尝试将其附加到会话,查询可用的用户会话以查看安全桌面是否正在运行自己的会话,我在命令提示符下输入:
查询会话
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 对我来说一直很好。
祝你好运:)
编辑:
我很幸运地对此进行了测试,这就是我所做的:
用gui下载了一个抓包工具,我试过7capture.com
然后我像这样启动7capture.exe:
PsExec -i -s -x c:\7capture.exe
现在我展示了带有“以管理员身份运行”的安全桌面。当弹出窗口出现时,我按下 ALT+TAB 并且有 7capture :)
按“刷新”按钮查看项目列表。 “桌面”在我的计算机上被称为“$$$Secure UAP 背景窗口”。
瞧,已捕获并可见
现在获取Screenshot secure desktop上的代码
我会更改桌面 HWND 调用:
Win32Stuff.GetDesktopWindow();
到 Enum 函数并为您在安全桌面中找到的每个 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);
试一试,看看你是否可以让它适用于所有场景。
编辑2:
由于这是 2 个不同的用户范围,因此您需要运行两个 Screencapture.exe 副本。一种用于安全桌面,一种用于交互式会话:
UAC:
PsExec -i -h -x -d -s "path_\screencapture.exe"
没有 UAC:
PsExec -i -h -d "path_\screencapture.exe"