我在Windows 10 Pro x64 ver 1703内部版本15063.726上,尝试编写程序重新启动程序服务。它通过计划任务每10分钟在具有管理员权限的情况下在我的用户下运行。
如果服务器不可用或出现故障:
唯一的麻烦是检测计算机是否被锁定。我尝试了几种方法:
仅在自计算机锁定以来用户开始输入密码时才返回NULL。除此之外,还会返回有效的句柄。大概在用户尝试登录并输入切换之前,不会取消选择输入桌面。
(当然传入GetCurrentThreadID())
句柄仍然匹配,可能是由于相同的原因1失败。
似乎也与用户输入密码有关……或者因为我的服务器重启程序是32位的,因此在读取64位进程LockApp.exe时遇到问题。
锁定时
在mentioned as dubious时,我也尝试过此操作。假阴性,表示未锁定
用代码示例here进行描述,这也是一个失败,并给出了假阴性。
还有什么办法吗?我确实宁愿没有仅用于注册不断运行的锁定/解锁的服务。
还是这些方法之一已经可以工作,并且Windows出现了问题?
干杯
最佳答案
我不确定如何在C#中执行此操作,但是使用PowerShell,我检查了LockApp.exe线程是否被挂起,以查看桌面是否已解锁或锁定,例如:
$lockapp = Get-Process lockapp
for ($i = 0; $i -lt 60; $i++)
{
$process=[System.Diagnostics.Process]::GetProcessById($lockapp.Id)
$threads=$process.Threads
if ($threads[0].WaitReason -eq "Suspended") { "It's unlocked" } else { "It's locked" }
Sleep 1
}
该脚本循环60秒,并写出锁定/解锁状态。