从 Windows 登录屏幕挂钩热键
Posted
技术标签:
【中文标题】从 Windows 登录屏幕挂钩热键【英文标题】:hook a hotkey from windows logon screen 【发布时间】:2010-12-07 16:29:30 【问题描述】:我建立了一个挂钩键盘的程序,当某个热键按下它打开门(连接到计算机的 COM1 串行端口)。
这工作正常,直到我锁定计算机 (winkey+L)。 我希望能够在登录屏幕上使用相同的热键打开门。
我使用的是 Windows XP 和 C#。
我该怎么做?
谢谢。
【问题讨论】:
你不能替换 GINA.dll 来获得你想要的功能吗? 【参考方案1】:您需要编写一个 Windows 服务来执行此操作。服务和驱动程序可以在用户登录之外运行,而且服务比驱动程序更容易编写。
【讨论】:
嗨,我遇到了完全相同的问题,我试图通过 NSSM 将我的程序安装为服务来解决,但它在启动后不会执行任何代码,即使我配置了权限也可能存在问题登录设置到本地计算机管理员帐户。有什么想法吗?我的主题在这里:***.com/questions/21797347/… - 谢谢【参考方案2】:你不能。当屏幕锁定时,鼠标和键盘输入不会发送到正在运行的程序。这是一个安全的事情。如果屏幕锁定时可以与正在运行的程序进行通信,那么锁定屏幕的意义何在
【讨论】:
请注意,winkey+U 是在登录屏幕上工作的,它正在运行一些 Microsoft 可访问性应用程序。我想这不是专有的硬编码功能,其他 3rd 方可访问性应用程序也可以做类似的事情...... @DxCK,操作系统几乎可以为所欲为,这就是 winkey+U 工作的原因。在用户空间运行的程序必须遵守操作系统制定的规则。这些规则之一是按键不会传递给在用户空间中运行的程序。我以前从未见过在锁定屏幕上使用过任何可访问性程序(我并不是说它们不存在,只是我从未遇到过)【参考方案3】:啊啊啊啊啊啊啊!!我找到了!!
这可以通过 sysinternals 中的“psexec /x”来完成。
【讨论】:
嗨,我在 C++ 中使用 WIN32 API 时遇到了完全相同的问题(除了我不是在控制门而是在文件中写入以从键盘仿真中的 arduino 更新网页)。您是如何通过锁定屏幕获得这些键盘敲击的?【参考方案4】:出于安全原因,不允许以普通用户权限运行的程序干扰登录屏幕。这使键盘记录器更难看到您的密码。
您需要将您的程序转换为服务。请参见 http://msdn.microsoft.com/en-us/library/ms686953(VS.85).aspx 有关如何实施和安装服务的详细信息。
【讨论】:
以上是关于从 Windows 登录屏幕挂钩热键的主要内容,如果未能解决你的问题,请参考以下文章