Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#windows服务中捕获键盘事件_C#_.net_Keyboard_Windows Services - Fatal编程技术网

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

在C#windows服务中捕获键盘事件,c#,.net,keyboard,windows-services,C#,.net,Keyboard,Windows Services,我已经用c#创建了一个windows服务。如何在按下某个键时调用函数,并在此函数中获取该键的值。上键和下键都需要它 我的目标是在按下某一系列键时发送电子邮件。例如,如果您按h-e-l-l-o,无论您在桌面上的何处键入,程序都应发送电子邮件 另外,我可以用另一种方式实现它。我需要一个程序,在后台运行,并做一些事情时,按下一个键 我怎么能做这样的事? 举个例子会很有帮助。正如有人已经评论过的,Windows服务没有前台窗口可以接收键盘焦点或Windows键盘消息。因此,要实现您所追求的目标,您唯一的

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

我的目标是在按下某一系列键时发送电子邮件。例如,如果您按h-e-l-l-o,无论您在桌面上的何处键入,程序都应发送电子邮件

另外,我可以用另一种方式实现它。我需要一个程序,在后台运行,并做一些事情时,按下一个键

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

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

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


这是我找到的最好的解决方案:
通常,作者从
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();
    }

既然windows服务在后台以非交互模式运行,您希望它如何工作?很明显,你想在某个特定的时间给服务提供一些指导……但是你必须想一种不同的方法。你能给我建议另一种解决方案吗?可能。但你必须更多地解释情况以及你想要实现的目标。当服务收到此输入时,它应该做什么?你们为什么要特别通过键盘输入呢?通常,用户不需要以这种方式控制服务,而是自动运行服务。这是用于调试或手动触发特定进程,还是什么?就像我说的,如果你能解释一下总体目标,那么也许我们可以找到另一种方法。例如,我想在按下某一系列键时发送一封电子邮件。例如,如果您在桌面上键入“hello”,无论您在哪里键入,程序都会发送电子邮件。@ADyson我认为OP不需要担心“被认为是间谍软件”-听起来这正是目标:)您不能从服务中使用
SetWindowsHook
,因为它需要“桌面”哪个服务没有-。请仔细检查并编辑那个奇怪的建议。第二个建议(向服务发送命令的用户应用程序)是推荐的方法。