我该如何用Delphi解锁Windows锁屏?我在Google或Stackoverflow上都没有找到任何信息。我已经尝试使用keybd_event输入我的密码,但似乎在锁屏时事件不起作用。
我该如何用Delphi解锁Windows锁屏?我在Google或Stackoverflow上都没有找到任何信息。我已经尝试使用keybd_event输入我的密码,但似乎在锁屏时事件不起作用。
您无法在用户空间通过编程方式解锁锁屏,这是设计上的限制。
好的,让我们澄清一下。使用文档化的API,您不能做到这一点。您需要像@Remko为他的SasLibEx产品所做的那样,反向工程未经记录的API。
Remko Weijnen在这个方向上有非常有趣的项目。他发布了一个命令行工具(Winstation Locker),能够解锁本地/远程Windows XP站点,而不需要知道锁定计算机的用户密码。
对于Windows Vista及更高版本,他开发了SasLibEx**库,甚至可以解锁特定的终端服务会话,同样不需要用户名/密码。
这两种方法都需要您在目标计算机上拥有管理员特权/帐户。
请注意,所有这些工具都使用可能被视为非法、不恰当、不容忍或犯罪的卑劣手段。应该与您的客户/雇主讨论并谨慎使用!
** SasLibEx是一种商业产品
Steamlink(一种硬件设备,可将您的steam游戏流式传输到大屏幕)目前存在一个问题,即如果您的屏幕位于房子的不同位置,则需要走到电脑旁解锁它,然后再回到大屏幕才能玩游戏。
为了让这更加方便,社区的人们提出了这个脚本:
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console" 2> UnlockErrors.log
它可以远程解锁您的电脑。您可以从Delphi调用tscon.exe来模拟相同的过程。
实际上,可以使用PowerShell、psexec和Windows屏幕键盘来完成此操作。虽然程序无法向Winlogon发送输入,但Windows OSK可以,而且程序确实可以向OSK发送输入。
注意:以下是远程解决方案。
据我所知,除非您从默认桌面切换到Winlogon桌面(桌面指所有活动的容器),否则锁定屏幕时键盘事件无法正常工作。
[背景]
默认桌面是您阅读此文章时使用的桌面。 Winlogon是按下 Ctrl + Alt + Del 时设置为活动状态的桌面。
[XP]
您需要从默认桌面切换到WinLogon桌面[请参考],然后通过获取解锁计算机的窗口句柄来解锁计算机。
IntPtr windowHandle = (IntPtr)FindWindow(null, "Unlock Computer");//Getting Window handle
Reference http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation
在远程运行tsdiscon.exe。不确定如何操作,但对我来说,它可以解锁锁定的屏幕。
CTRL+ALT+DEL
的屏幕吗?因为这是故意设计的,无法从除了Windows自身以外的任何应用程序中解锁它。 - Jerry Dodge