Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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# 监视C中的特定击键#_C#_Windows_Keypress - Fatal编程技术网

C# 监视C中的特定击键#

C# 监视C中的特定击键#,c#,windows,keypress,C#,Windows,Keypress,我需要编写一个Windows应用程序,它可以监视按键,而不考虑焦点。当它检测到特定的击键(特别是Ctrl+V)时,它需要执行某些操作 如何从C#监视Windows中的击键,而不考虑焦点?我不完全理解您的问题,但如果您想注册全局键而不考虑窗口焦点,则可以使用Windows API。我不完全理解您的问题,但是,如果您想注册全局密钥而不考虑窗口焦点,则可以使用windows API。一种非常简单的方法是使用GetASyncKeyState。 我只在游戏中使用它,但我认为它在这里会起作用 导入此文件:

我需要编写一个Windows应用程序,它可以监视按键,而不考虑焦点。当它检测到特定的击键(特别是Ctrl+V)时,它需要执行某些操作


如何从C#监视Windows中的击键,而不考虑焦点?

我不完全理解您的问题,但如果您想注册全局键而不考虑窗口焦点,则可以使用Windows API。

我不完全理解您的问题,但是,如果您想注册全局密钥而不考虑窗口焦点,则可以使用windows API。

一种非常简单的方法是使用GetASyncKeyState。 我只在游戏中使用它,但我认为它在这里会起作用

导入此文件:

[DllImport("user32.dll")]
static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey); 
然后你就可以做(在循环或定时器中)

如果你需要它在按下时只发生一次,你可以声明

bool oldK; //at class scope
然后在循环/计时器中

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

一种非常简单的方法是使用GetASyncKeyState。 我只在游戏中使用它,但我认为它在这里会起作用

导入此文件:

[DllImport("user32.dll")]
static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey); 
然后你就可以做(在循环或定时器中)

如果你需要它在按下时只发生一次,你可以声明

bool oldK; //at class scope
然后在循环/计时器中

if(!oldK && GetAsyncKeyState(Keys.ControlKey) && GetAsyncKeyState(Keys.K))
{
     //DO SOME STUFF!!
}
oldK = GetAsyncKeyState(Keys.K);
签出这篇文章

您需要将代码写入一个类中。然后将该类添加到windows服务中。实例化到windows服务的start()方法中。olace将缓冲代码放入某个计时器中 e、 g

签出这篇文章

您需要将代码写入一个类中。然后将该类添加到windows服务中。实例化到windows服务的start()方法中。olace将缓冲代码放入某个计时器中 e、 g


看看这里:我想这个词的通称是键盘记录器。对我来说,这听起来像是一种键盘记录器。我曾经在python中看到过一种非常简单的方法,只需要20行代码之类的东西,但那是另一天的事了。:)查看问题的更具体版本。它显示了键盘记录程序的完整C#代码。看看这里:我认为这是键盘记录程序的通称。对我来说,这听起来像是一种键盘记录程序。我曾经在python中看到过一种非常简单的方法,只需要20行代码之类的东西,但那是另一天的事了。:)查看问题的更具体版本。它显示了键盘记录器的完整C#代码。这听起来像是一种判断按键是否当前按下的方式,而不是按键时收到通知的方式。这听起来像是一种判断按键是否当前按下的方式,而不是按键时收到通知的方式。如果我使用RegisterHotKey注册[Ctrl+V],那么,用户是否仍然能够在其他应用程序中使用此键盘快捷键从剪贴板转到过去,或者我的程序是否会拦截它?我写这篇文章的原因是,程序将自动将剪贴板中的下一个项目排队,这样用户只需反复按[Ctrl+v](他们正在从一个应用程序到另一个应用程序进行数据输入)。根据RegisterHotKey的MSDN描述,它应该可以全局工作,因此,即使程序未处于活动状态,您也应该能够对程序中的所有消息排队。但我不确定Ctrl+V,因为它已经在系统中注册了。试一下。我试过了,我的应用程序捕获了Ctrl+V并阻止聚焦窗口接收它,这不是我想要的:如果我使用RegisterHotKey注册[Ctrl+V],那么用户是否仍然能够在其他应用程序中使用剪贴板上的此键盘快捷键,或者我的程序是否会拦截它?我写这篇文章的原因是,程序将自动将剪贴板中的下一个项目排队,这样用户只需反复按[Ctrl+v](他们正在从一个应用程序到另一个应用程序进行数据输入)。根据RegisterHotKey的MSDN描述,它应该可以全局工作,因此,即使程序未处于活动状态,您也应该能够对程序中的所有消息排队。但我不确定Ctrl+V,因为它已经在系统中注册了。试一下。我试过了,我的应用程序捕获了Ctrl+V并阻止聚焦窗口接收它,这不是我想要的: