【发布时间】:2020-03-20 16:30:02
【问题描述】:
我有一个我们在公司内部使用的简单屏幕保护程序,我正在尝试让屏幕保护程序检测到它正在远程桌面会话(或终端服务会话)中运行,并在这种情况下阻止屏幕保护程序同时启动并锁定工作站。
检测session is remote是否足够简单,因此很容易退出屏幕保护程序,但工作站仍然锁定。
我尝试了 0 和 1 的退出代码,希望这会有所作为,但事实并非如此。我还尝试使用 SendKeys 在(默认)5 秒宽限期到期之前尝试模拟对屏幕保护程序主窗体的按键,但这也不起作用。
这是我在主窗体的构造函数中使用的示例:
if (IsRemoteSession())
{
SendKeys.Send(Environment.NewLine);
Environment.Exit(0);
}
我已经测试满足上述条件。
任何人都可以提出一种可以实现这一目标的方法吗?
【问题讨论】:
-
感谢@sellotape,我目前正在使用其中的一些标志,但我会在链接问题中尝试那些特定的。
-
不幸的是@sellotape 以上不起作用,我认为这是因为我在屏幕保护程序已被触发后进行了 SetThreadExecutionState 调用。我怀疑我需要制作一个独立的可执行文件,当它检测到 RDP 时使用这个调用,然后在它变成本地会话时清除它。不过,我可能会首先考虑使用 Win32 API 来尝试模拟真正的击键,因为在屏幕保护程序启动后 5 秒内进行真正的击键确实有效。非常感谢您的建议
标签: c# rdp screensaver