C#中的热键

来源:百度知道 编辑:UC知道 时间:2024/05/26 11:54:48
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Complex_00A
{
public partial class Form1 : Form
{
//HotKey HK = new HotKey();
public Form1()
{
InitializeComponent();
}

private void Form1_Activated(object sender, EventArgs e)
{
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);
}

private void Form1_Leave(object sender, EventArgs e)
{
HotKey.UnregisterHotKey(Handle, 100);
HotKey.UnregisterHotKey(Handle, 101);

还有这么好的东东啊 我以为只能用钩子呢 收藏了
既然接到了你这么好的东东 就跟你说一下
[DllImport("user32.dll",SetLastError=true)]
这是调用系统函数,相关资料可以上网查询C# API
public static extern bool RegisterHotKey(IntPtr hWnd,int Id,KeyModifiers fsModifiers,Keys vk);
这个方法是注册窗体热键的API函数,第一个参数是你给那个控件注册,就用那个控件的句柄,第二个参数是一个ID值,表示接到这个热键后窗体接到的消息的命令字,第三个参数表示是那个关键的键位,第四个参数表示是那个普通的键

楼上的 你的理解是错误的 这个热键是全局的 我曾经用全局钩子截获键盘信息实现,然后知道这个方法,很高兴。你可以试一下,如果当前焦点不在这个窗体上,KEYDOWN是没有用的,而这个热键是有用的。相关例子,当你打开QQ,可以CTRL+ALT+Z打开聊天框,就用了这个方法

楼上的,其实LZ用的就是WIN API口牙
重写Winproc函数,抓取了消息队列的东西
其实如果用.NET的标准方法,应该是抓取KEY_DOWN吧