如何在计算机锁定时按键盘键

时间:2011-01-12 20:01:27

标签: c# windows keyboard

我希望能够“按下”Scroll Lock键(来自应用程序), 这样键盘上的滚动锁将打开或关闭。

我在函数keybd_event(来自user32.dll)上使用了DllImport来执行此操作, 我的应用程序在win xp上作为服务运行。

它工作正常,但当我锁定电脑(win + L)时,该功能停止工作。

我已尝试将该服务作为本地服务和管理员运行,但它没有任何区别。

有什么建议吗?

感谢。

3 个答案:

答案 0 :(得分:0)

一种可能性是订阅notification of the workstation being unlocked,然后在那时做出契约。

答案 1 :(得分:0)

首先,您需要一个全局挂钩,因为您从Windows服务运行,您必须使服务交互,这可以从LogOn选项卡上的服务控制面板设置 - >允许服务与桌面交互。

尽管使用托管代码,全局挂钩并不容易。您仍然需要一些非托管代码来调用它,但这可能会对您有所帮助:http://www.codeproject.com/KB/system/globalsystemhook.aspx

我无法确定当你锁定计算机时这是否有效,因为Windows会采取额外的预防措施来防止键盘记录程序窃取密码。

出于教育目的,如果您想拦截登录,则记录的方法是替换gina.dll。

答案 2 :(得分:0)

感谢帮助人员。

我最终做的是用我自己的dll(ginastub.dll)替换msgina.dll, 并在其中打开了一个新的线程(在winlogon会话中运行)。 我的服务可以使用命名管道与该线程通信,并发送命令“按”键。

花了一段时间,但似乎有效:)