如何解锁Windows的锁屏?

11

我该如何用Delphi解锁Windows锁屏?我在Google或Stackoverflow上都没有找到任何信息。我已经尝试使用keybd_event输入我的密码,但似乎在锁屏时事件不起作用。


1
你是指需要按下 CTRL+ALT+DEL 的屏幕吗?因为这是故意设计的,无法从除了Windows自身以外的任何应用程序中解锁它。 - Jerry Dodge
5
让你的程序向用户发送一封电子邮件:“嘿!请解锁计算机。” - Rob Kennedy
1
我认为这可以从内核模式完成,尽管我没有具体的指令来完成这个任务。另外,要将任何东西放入内核模式中,您需要直接获得管理员的许可(以安装内核模式驱动程序)。 - Eugene Mayevski 'Callback
3
我认为这是可行的,但我只是想不明白为什么 - kobik
5个回答

9

您无法在用户空间通过编程方式解锁锁屏,这是设计上的限制。


好的,让我们澄清一下。使用文档化的API,您不能做到这一点。您需要像@Remko为他的SasLibEx产品所做的那样,反向工程未经记录的API。


7
同意。如果任意应用程序可以自由解锁电脑,那将是一个巨大的安全风险。 - Remy Lebeau
1
这实际上是锁屏的目的,将您的计算机锁定。 - Jerry Dodge
1
我在考虑“终端服务客户端”……也许我想错了,但似乎有一种自动化方式可以通过“自动”登录来解锁用户帐户。 - kobik
2
我的意思是终端服务客户端可以发送用户名/密码并登录到远程帐户。我真的认为这是可行的,而且客户端可以通过编程方式解锁帐户。我不明白为什么不能做到。 - kobik
3
几乎不行。系统可以做得更多。 - David Heffernan
显示剩余4条评论

8

Remko Weijnen在这个方向上有非常有趣的项目。他发布了一个命令行工具(Winstation Locker),能够解锁本地/远程Windows XP站点,而不需要知道锁定计算机的用户密码。

对于Windows Vista及更高版本,他开发了SasLibEx**库,甚至可以解锁特定的终端服务会话,同样不需要用户名/密码。

这两种方法都需要您在目标计算机上拥有管理员特权/帐户。

请注意,所有这些工具都使用可能被视为非法、不恰当、不容忍或犯罪的卑劣手段。应该与您的客户/雇主讨论并谨慎使用!

** SasLibEx是一种商业产品


4
谢谢您链接我的工具!但请注意,Winstation Locker是免费的,而SasLibEx是一个商业解决方案。 - Remko
@DavidHeffernan,Winstation Locker链接描述了它的工作原理……至于SasLibEx不是公开的,但企业版附带源代码! - Remko
2
@Remko 那它是如何工作的呢?表面上看起来,它听起来像是一个可以用来构建恶意软件的库。 - David Heffernan
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/28087/discussion-between-remko-and-david-heffernan - Remko
@DavidHeffernan 如果需要管理员权限的话,那也完全没问题。我是唯一会使用这个程序的用户 - 这只是为了我自己而已。 - fnkr
显示剩余5条评论

6

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来模拟相同的过程。


3

实际上,可以使用PowerShell、psexec和Windows屏幕键盘来完成此操作。虽然程序无法向Winlogon发送输入,但Windows OSK可以,而且程序确实可以向OSK发送输入。


6
如果你能提供一个例子,我会接受你的答案作为解决方案。 - fnkr

1

注意:以下是远程解决方案。

据我所知,除非您从默认桌面切换到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。不确定如何操作,但对我来说,它可以解锁锁定的屏幕。

2
还有,您需要添加 reg key 才能让 tsdiscon.exe 工作。Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"DefaultDomainName"="域名""DefaultUserName"="域名\用户名""AutoAdminLogon"="1""DefaultPassword"="密码" - Ronak Agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接