使用WinAPI全局热键注册和全局模拟按键

一、全局热键注册 

1、先引用DLL

[System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI 

public static extern bool RegisterHotKey( //设置热键

 IntPtr hWnd, // 窗口句柄,一般使用Handle属性 

int id, // 区别热键的ID号,这个可以随便写,只是用来区分不同热键 

uint fsModifiers, // 修正键用户接下哪些键是发生 可能为contol=2, alt=1, shift=4, windows=8或这些键的组合,如果没有的话直接用0 

Keys vk // 键 

); 

[System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI 

public static extern bool UnregisterHotKey( //注销热键 

IntPtr hWnd, // 窗口句柄

 int id // 键标识 

); 


2、调用函数

RegisterHotKey(Handle, 200, 0, Keys.F1); // 注册热键F1 


3、此事件用来响应热键

protected override void WndProc(ref Message m)//监视Windows消息

 { 

     const int WM_HOTKEY = 0x0312; //如果m.Msg的值为0x0312那么表示用户按下了热键 

    switch (m.Msg) 

   { 

     case WM_HOTKEY: ProcessHotkey(m); //按下热键时调用ProcessHotkey()函数 

     break;

   } 

    base.WndProc(ref m); //将系统消息传递自父类的WndProc 

}


4、判断是按了哪个热键,然后执行方法

private void ProcessHotkey(Message m) //用于控制运行窗体是否开启 

IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型

string sid = id.ToString(); //根据注册热键时传递的ID区分按得是哪个热键 

switch (sid)

 { 

    case "200": //code。。触发之后执行的代码 

    break; 

}

二、模拟按键(全局) 

1、引用API

[DllImport("user32.dll", EntryPoint = "keybd_event")] 

public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, UIntPtr dwExtraInfo);

参数1:键盘码,具体请到百度搜索键盘码

参数2:键盘扫描码,可以使用0 

参数3:表示触发的键盘事件类型,比如key_up,key_down等,默认直接用0

参数4:没多大用,直接用UIntPtr.Zero就行 


2、调用 

byte VK_F11 = 122; //模拟按下F11键 

keybd_event(VK_F11, 0, 0, UIntPtr.Zero);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值