我希望能够“按下”Scroll Lock键(来自应用程序), 这样键盘上的滚动锁将打开或关闭。
我在函数keybd_event(来自user32.dll)上使用了DllImport来执行此操作, 我的应用程序在win xp上作为服务运行。
它工作正常,但当我锁定电脑(win + L)时,该功能停止工作。
我已尝试将该服务作为本地服务和管理员运行,但它没有任何区别。
有什么建议吗?
感谢。
答案 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会话中运行)。 我的服务可以使用命名管道与该线程通信,并发送命令“按”键。
花了一段时间,但似乎有效:)