• 使用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);

    Newd

    版权声明

    作者:扶我起来我还要敲

    地址:https://www.cnblogs.com/Newd/p/4765790.html

    © Newd 尊重知识产权,引用请注出处

    广告位

    (虚位以待,如有需要请私信)

  • 相关阅读:
    【Oracle】ORA-00257:archiver error. Connect internal only, until freed 错误的处理方法
    【SQL】区分新来顾客和再访顾客
    【Xcelsius】在PPT中嵌入水晶易表Xcelsius2008仪表盘
    【SAP BO】【WEBI】【转】Webi实现动态选择度量
    【转】Xcelsius2008 水晶易表问题 部分汇总
    如何进行有效的需求调研
    实现数据仓库的七个步骤、七个禁忌、七种思路
    UTC日期转时间戳
    WIN10下命令行禁用编辑模式
    让socket端口不被子进程继承
  • 原文地址:https://www.cnblogs.com/Newd/p/4765790.html
Copyright © 2020-2023  润新知