监视C#中的特定击键

问题描述:

我需要编写一个Windows应用程序,该应用程序监视键击而不管焦点。当它检测到特定的击键时(特别是),它需要执行某些操作。监视C#中的特定击键

如何监控Windows中从C#中的击键而不管焦点如何?

+0

看一看这里:http://*.com/questions/1100285/c-how-to-detect-the-currently-pressed-key/1927644#1927644 –

+0

我认为的总称这是** Keylogger ** – V4Vendetta

+0

Yip听起来像一种键盘记录器给我。我看到了一种非常简单的方式来在python中执行此操作,只有20行代码或其他内容,但是在另一天。 :) – Jethro

我不完全理解你的问题,但是如果你想注册全局键而不管你的窗口焦点,你可以使用RegisterHotKey Windows API。

+0

如果我使用RegisterHotKey注册[Ctrl + V],那么用户仍然可以使用此键盘快捷键从其他应用程序中的剪贴板中过去,或者我的程序会拦截它吗?我写这个的原因是,程序会自动将下一个项目排入剪贴板,因此用户只需反复按[Ctrl + v](他们正在从应用到应用进行数据输入)。 – Ozzah

+0

根据RegisterHotKey的MSDN描述,它应该可以全局工作,所以即使它没有激活,你也应该能够排列程序中的所有消息。但是我不确定Ctrl + V,因为它已经在系统中注册了。你试一试。 –

+0

我试过了,我的应用程序捕获了Ctrl + V,并停止了焦点窗口接收它,这不是我想要的:http://*.com/questions/6838540/c-detecting-ctrlv-with-registerhotkey-but-不要拦截它 – Ozzah

一个很简单的方法就是使用GetASyncKeyState。 我只用于游戏,但我认为它会在这里工作。

导入这样的:

[DllImport("user32.dll")] 
static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey); 

然后你可以做(​​在一个循环或定时器)

if(GetAsyncKeyState(Keys.ControlKey) && GetAsyncKeyState(Keys.K)) 
{ 
//DO SOME STUFF!! 
} 

如果你需要它只有一次,当它压发生,你可以声明

bool oldK; //at class scope 

然后在你的循环/定时器

if(!oldK && GetAsyncKeyState(Keys.ControlKey) && GetAsyncKeyState(Keys.K)) 
{ 
    //DO SOME STUFF!! 
} 
oldK = GetAsyncKeyState(Keys.K); 
+0

这听起来像是一种判断当前键是否被按下的方式,而不是在按下时被通知的方式。 – Gabe

结账本文Detecting and recording key strokes in C#

你需要编写的代码到一个类所这个类添加到Windows service.Instaniate到启动(窗口)方法service.olace缓冲代码到一些定时器 例如

 this.timerBuffFlush = new System.Timers.Timer(); 
     this.timerBuffFlush.Enabled = true; 
     this.timerBuffFlush.Elapsed += new System.Timers.ElapsedEventHandler(this.timerBuffFlush_Elapsed); 
     this.timerBufferFlush.Interval = 60000; 
    }