在 C# windows 服务中捕获键盘事件

问题描述 投票:0回答:3

我用c#创建了一个windows服务。如何在按下某个键时调用一个函数,并在该函数中获取该键的值。我需要它来按下键和按下键。

我的目标是在按下特定系列的键时发送电子邮件。例如,如果您按 h-e-l-l-o,无论您在桌面上的哪个位置键入,程序都应该发送电子邮件。

另外,我可以用其他方式实现它。我需要一个在后台运行并在按下键时执行某些操作的程序。

我怎么能做这样的事呢? 一个例子会很有帮助。

c# .net keyboard windows-services
3个回答
1
投票

正如有人已经评论过的那样,Windows 服务没有可以接收键盘焦点或 Windows 键盘消息的前台窗口。因此,要实现您想要的目标,您唯一的选择是使用低级事件挂钩来接收键盘事件。

但请注意,这些是系统范围的事件,您的服务可能会被它们淹没。它们在屏幕阅读器和其他辅助技术等应用程序中很有用,但我建议在使用此方法之前尝试考虑是否有其他方法可以完成您想做的事情。例如,您可以在系统托盘中运行应用程序并通过调用 RegisterHotKey 订阅 WM_HOTKEY 消息吗?

这是一个 C# 中的低级键盘挂钩示例


1
投票

我找到的最佳解决方案:
通常,作者在

user32.dll
程序集中的低级方法上创建 .NET 包装器,这使得使用这些方法变得非常愉快和愉快。

    private LowLevelKeyboardListener _listener;        
    _listener = new LowLevelKeyboardListener();
    _listener.OnKeyPressed += _listener_OnKeyPressed;
    _listener.HookKeyboard();

    void _listener_OnKeyPressed(object sender, KeyPressedArgs e)
    {
        this.textBox_DisplayKeyboardInput.Text += e.KeyPressed.ToString();
    }

原链接在这里


0
投票

我尝试了您的解决方案,但在 Windows 服务中未检测到按键。

为了验证我的代码,我创建了一个控制台应用程序,这里一切正常。

有人能解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.