C# 使用MouseKeyHook时未触发按键事件

C# 使用MouseKeyHook时未触发按键事件,c#,mousekeyhook,C#,Mousekeyhook,几天前,我开始使用MouseKeyHook库截取我们正在构建的应用程序的键盘按钮(该应用程序使用数字键盘作为输入,通过Akka等发送特定消息) 我使用一个控制台应用程序并在那里注册了所有内容,很快就让它工作了,但一旦我将实现移动到一个特定的服务中,它就停止了工作(事件没有被触发) 下面是代码示例: public class KeypadService : IKeypad { private readonly IKeyboardEvents _keyboardEvents; pu

几天前,我开始使用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
    }
}
公共类键盘服务:IKeypad
{
私有只读IKeyboardEvents\u键盘事件;
公钥密码服务()
{
_keyboardEvents=Hook.GlobalEvents();
_keyboardEvents.KeyPress+=GlobalHookKeyPress;
}
启用公共作废(输入操作代码)
{
}
公共无效禁用()
{
_keyboardEvents.KeyPress-=GlobalHookKeyPress;
}
私有静态void GlobalHookKeyPress(对象发送器,KeyPressEventArgs e)
{
//做点什么
}
}
键盘服务由Autofac在应用程序启动时创建(启动应用程序是一个控制台应用程序)

builder.RegisterType().As().SingleInstance();
构造函数被命中,所有内容都在构造函数内执行


有没有线索说明它为什么不会开火?感谢您的帮助

我的假设是,您正在尝试从windows服务挂接键盘。如果是这样,就有问题了

简要说明: Windows挂钩需要有一个所谓的“交互式会话”才能正常工作。每当用户登录时,就会创建一个交互式会话。由于可以有多个用户登录到windows计算机,因此有时会有多个交互式会话,有时则没有。服务独立于交互式会话运行,甚至在无人登录时运行

有关详细说明,请参见此线程:
windows服务

您正在尝试从windows服务挂接键盘吗?是吗?不完全是,但我明白你的意思。实际上,我是通过一个控制台应用程序(在后台作为windows应用程序运行)来运行它的,该应用程序执行通常的启动操作,如注册依赖项、启动我的actor系统等。我的第一个方法是让Autofac创建一个KeypadService实例,但这不起作用,然后,我在控制台应用程序中手动创建了一个实例,并将该实例传递给依赖项解析器,以便它可以自己完成任务,但我不想继续这样做。
builder.RegisterType<KeypadService>().As<IKeypad>().SingleInstance();