我正在与屏幕共享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“
我的问题是,有没有办法这样做?
发布于 2018-11-04 10:30:01
因为我在工作,所以我无法检验我的理论。我还没有权利发表评论..。所以请容忍我,如果这不管用的话。
作为系统运行可能与它没有“桌面”目录有关。因此,请创建以下目录:
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“
如果不起作用,请尝试将其附加到会话,查询可用的用户会话,以查看安全桌面是否正在运行自己的会话名,我命令提示符输入以下命令:
查询会话
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一直对我很好。
祝你好运:)
编辑:
我很幸运地测试了这个,这就是我所做的:
PsExec -i -s -x c:\7capture.exe
现在是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);试一试,看看你是否能让它适用于所有的场景。
Edit2:
因为这些是两个不同的用户作用域,所以需要运行两个Screencapture.exe副本。一个用于安全桌面,另一个用于交互式会议: UAC:
PsExec -i -h -x -d -s "path_\screencapture.exe“
没有UAC:
PsExec -i -h -d "path_\screencapture.exe“
https://stackoverflow.com/questions/53101802
复制相似问题