windows C#检测所有窗口中的按键事件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5450362/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
C# detecting key event in all windows
提问by giger
Hey, i have some problem with key event handler. This is source:
嘿,我有一些关键事件处理程序的问题。这是来源:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;
public void Form1_KeyPessed(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
DrawSquare();
}
}
public void DrawSquare()
{
int line = Convert.ToInt16(textBox1.Text);
int time = Convert.ToInt16(textBox2.Text);
int x = MousePosition.X;
int y = MousePosition.Y;
Cursor.Position = new Point(x - line / 2, y - line / 2);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
Thread.Sleep(time);
Cursor.Position = new Point(x - line / 2, y + line / 2);
Thread.Sleep(time);
Cursor.Position = new Point(x - line / 2, y + line / 2);
Thread.Sleep(time);
Cursor.Position = new Point(x + line / 2, y - line / 2);
Thread.Sleep(time);
Cursor.Position = new Point(x - line / 2, y - line / 2);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
Thread.Sleep(time);
Cursor.Position = new Point(x, y);
}
}
}
Now it only draws square when i press F2 in form, but i want it to work on all windows. What should i need more? (this is kinda auto drawer for perfect shapes)
现在它只在我按 F2 时绘制正方形,但我希望它在所有窗口上都能工作。我还需要什么?(这是一种用于完美形状的自动抽屉)
回答by Ben Voigt
If you only want to handle a couple key combinations, you can use RegisterHotKey
. If you want to detect all different key events, go with the global hook as Paul suggested.
如果您只想处理几个组合键,可以使用RegisterHotKey
. 如果您想检测所有不同的关键事件,请按照 Paul 的建议使用global hook。
回答by Paul D'Ambra
You need a global hook. There's a brilliant implementation here http://www.codeproject.com/KB/cs/globalhook.aspx
你需要一个全局钩子。这里有一个很棒的实现http://www.codeproject.com/KB/cs/globalhook.aspx