我正在使用Windows 10 Pro x64版本1703构建15063.726,尝试编写一个程序重启服务。它在我的用户下以管理员权限运行,每10分钟通过计划任务运行。
如果服务器不可用或出现故障:
- 如果我的计算机被锁定,重启器将杀死并重新启动服务器程序。 - 如果我的计算机没有被锁定,重启器会显示一个对话框以确认重启。我可能正在对服务器程序进行调试工作,不希望重启破坏任何调试工作。
唯一的复杂之处在于检测计算机是否被锁定。我已经尝试了几种方法:
1. OpenInputDesktop() 只有当用户自从计算机锁定以来开始输入密码时,才返回NULL。除此之外,返回有效句柄。假设输入桌面直到用户尝试登录并切换他们的输入之前都不会被取消选择。 2. OpenInputDesktop()与GetThreadDesktop() (当然传入GetCurrentThreadID()) 句柄仍然匹配,可能是由于同样的原因1失败。 3. 进程检查LockApp.exe / LockAppHost.exe 似乎也与用户输入密码有关...或者因为我的服务器重启应用程序是32位的,无法读取64位进程LockApp.exe。 4. GetForegroundWindow()在锁定时返回null
如果服务器不可用或出现故障:
- 如果我的计算机被锁定,重启器将杀死并重新启动服务器程序。 - 如果我的计算机没有被锁定,重启器会显示一个对话框以确认重启。我可能正在对服务器程序进行调试工作,不希望重启破坏任何调试工作。
唯一的复杂之处在于检测计算机是否被锁定。我已经尝试了几种方法:
1. OpenInputDesktop() 只有当用户自从计算机锁定以来开始输入密码时,才返回NULL。除此之外,返回有效句柄。假设输入桌面直到用户尝试登录并切换他们的输入之前都不会被取消选择。 2. OpenInputDesktop()与GetThreadDesktop() (当然传入GetCurrentThreadID()) 句柄仍然匹配,可能是由于同样的原因1失败。 3. 进程检查LockApp.exe / LockAppHost.exe 似乎也与用户输入密码有关...或者因为我的服务器重启应用程序是32位的,无法读取64位进程LockApp.exe。 4. GetForegroundWindow()在锁定时返回null
虽然被质疑, 我也尝试了这个方法。显示未锁定,但实际上是错误的负面结果。
- 手动切换桌面并查看是否有效
使用代码示例描述在这里,这个方法也是失败的并且给出了错误的负面结果。
还有其他的方法吗?我真的不想一直运行一个服务来注册锁定/解锁状态。
或者说这些方法中应该已经有一个可以工作了,我的Windows系统有问题吗?
谢谢