Monitoring for specific Keystrokes in C#

家住魔仙堡 提交于 2019-12-20 05:55:07

问题


I need to write a Windows application which monitors keystrokes regardless of focus. When it detects a particular keystroke (Ctrl + V, specifically), it needs to perform certain actions.

How can I monitor keystrokes in Windows from C# regardless of focus?


回答1:


I am not fully understand your question, but If you would like to register global key regardless of your window focus you can use RegisterHotKey windows API.




回答2:


A really easy way to do it is with GetASyncKeyState. I use it only for games but I think it would work here.

Import this:

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

Then you can just do (in a loop or timer)

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

If you need it to happen just once when it's pressed you can declare

bool oldK; //at class scope

then in your loop/timer

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



回答3:


checkout this article Detecting and recording key strokes in C#

you need to write the code into a class.Then add this class to a windows service.Instaniate into start() method of windows service.olace the buffering code into some timer e.g

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


来源:https://stackoverflow.com/questions/6703232/monitoring-for-specific-keystrokes-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!