开发通过 RDP/终端服务使用时不会锁定屏幕的屏幕保护程序



我有一个简单的屏幕保护程序,我们在公司内部使用,我正在尝试让屏幕保护程序检测它是否在远程桌面会话(或终端服务会话(中运行,并在这种情况下阻止屏幕保护程序启动和锁定工作站。

检测会话是否是远程的很容易,所以退出屏幕保护程序很容易,但工作站仍然锁定。

我已经尝试过退出代码0&1,希望这会有所不同,但事实并非如此。我还尝试过使用SendKeys来模拟在(默认(5秒宽限期到期之前按下屏幕保护程序的主窗体,但这也不起作用。

下面是我在主窗体的构造函数中使用的一个示例:

if (IsRemoteSession())
{
SendKeys.Send(Environment.NewLine);
Environment.Exit(0);
}

我已测试满足上述条件。

有人能提出实现这一目标的方法吗?

您可以使用WIN32 API(user32.dll(中的GetLastInputInfo来确定最后一次用户输入发生的时间。空闲10分钟后(例如(,您可以使用SendInput方法(也来自user32.dll(发送一个1像素的鼠标移动。这被解释为物理移动,并重置最后一个用户输入计数器。

我用它写了一个应用程序,当人们在Zoom通话时,它会阻止锁定屏幕的启动(它会监控活动的Zoom通话过程(。

https://www.pinvoke.net/default.aspx/user32/GetLastInputInfo.htmlhttps://www.pinvoke.net/default.aspx/user32/SendInput.html

最新更新