我几天前开始使用MouseKeyHook库截取我们正在构建的应用程序的键盘按钮(应用程序使用数字键盘作为输入通过Akka发送特定消息等)。
我已经成功地使用控制台应用程序并在那里注册了所有内容,但是一旦我将实现移动到特定服务中,它就停止了工作(事件没有被触发)。
以下是代码示例:
public class KeypadService : IKeypad
{
private readonly IKeyboardEvents _keyboardEvents;
public KeypadService()
{
_keyboardEvents = Hook.GlobalEvents();
_keyboardEvents.KeyPress += GlobalHookKeyPress;
}
public void Enable(Action<string> codeEntered)
{
}
public void Disable()
{
_keyboardEvents.KeyPress -= GlobalHookKeyPress;
}
private static void GlobalHookKeyPress(object sender, KeyPressEventArgs e)
{
// Do something
}
}
KeypadService由Autofac在应用程序启动时创建(启动应用程序是一个控制台应用程序)。
builder.RegisterType<KeypadService>().As<IKeypad>().SingleInstance();
构造函数被命中,一切都在构造函数内执行。
有关为何可能无法开火的任何线索?任何帮助表示赞赏!
答案 0 :(得分:0)
我的假设是你正试图从Windows服务中挂钩键盘。如果是这样则有问题。
简要说明: Windows挂钩需要有一个所谓的&#34;交互式会话&#34;为了正常工作。每当用户登录时都会创建一个交互式会话。由于多个用户可以登录到Windows机器,因此有时会有多个交互式会话,有时甚至没有。服务独立于交互式会话运行,甚至在没有人登录时运行。
有关详细说明,请参阅此主题:Global Keyboard Hook from windows service windows-service