zoukankan      html  css  js  c++  java
  • C#利用WIN32实现按键注册

    using System.Runtime.InteropServices;
    using System.Collections.Generic;
    using System;
    using System.Windows.Forms;
    
    namespace Phoenix
    {
        //注册系统按键消息
        class HotKeys
        {
            [DllImport("user32.dll")]
            private static extern bool RegisterHotKey(IntPtr hWnd, int id, int modifiers, Keys vk);
            [DllImport("user32.dll")]
            private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
    
            public enum HotkeyModifiers
            {
                Alt = 1, Control = 2, Shift = 4, Win = 8
            }
    
            public delegate void HotkeyCallbackHandler();
            int keyId = 10;
            Dictionary<int, HotkeyCallbackHandler> keyMap = new Dictionary<int, HotkeyCallbackHandler>();
    
            /// <summary>
            /// 注册快捷键
            /// </summary>
            /// <param name="hWnd">持有快捷键窗口的句柄</param>
            /// <param name="modifiers">组合键</param>
            /// <param name="vk">快捷键的虚拟码</param>
            /// <param name="callback">回调函数,在按下快捷键后调用</param>
            public void Regist(IntPtr hWnd, int modifiers, Keys vk, HotkeyCallbackHandler callback)
            {
                int id = keyId++;
                if (!RegisterHotKey(hWnd, id, modifiers, vk))
                {
                    throw new Exception("RegisterHotKey Error!");
                }
                keyMap[id] = callback;
            }
            public void UnRegist(IntPtr hWnd, HotkeyCallbackHandler callback)
            {
                foreach (var item in keyMap)
                {
                    if (item.Value == callback)
                        UnregisterHotKey(hWnd, item.Key);
                }
            }
    
            public void ProcessHotKey(Message message)
            {
                if (message.Msg == 0x312)
                {
                    int id = message.WParam.ToInt32();
                    HotkeyCallbackHandler handler;
                    if (keyMap.TryGetValue(id, out handler))
                        handler();
                }
            }
        }
    }
    //http://www.cnblogs.com/vvv999vz/archive/2011/08/03/2126503.html
    
    using System;
    using System.Collections.Generic;
    
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace Phoenix
    {
    
        class MyForm : Form
        {
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string className, string titleName);
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr child, string className, string formText);
            [DllImport("user32.dll")]
            public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, string lParam);
    
    
            HotKeys hotKey = new HotKeys();
    
            protected override void WndProc(ref Message message)
            {
                hotKey.ProcessHotKey(message);
                base.WndProc(ref message);
            }
    
            
            //跨越程序输入,向记事本的文本框写入指定字符
            public void callBack()
            {
                const int WM_SETTEXT = 0x00c;
                IntPtr hWndNotepad = FindWindow(null, "无标题 - 记事本");
                IntPtr hTextbox1 = FindWindowEx(hWndNotepad, IntPtr.Zero, "EDIT", null);
                IntPtr hTextbox2 = FindWindowEx(hWndNotepad, hTextbox1, "EDIT", null);
                SendMessage(hTextbox1, WM_SETTEXT, IntPtr.Zero, this.Text);
            }
    
            static void Main(string[] args)
            {
                MyForm form = new MyForm() { Text = "C#模拟键盘输入" };
                form.Load += delegate
                 {
                     //register Ctrl+E 
                     form.hotKey.Regist(form.Handle, (int)HotKeys.HotkeyModifiers.Control, Keys.E, form.callBack);
                 };
                Application.Run(form);
    
            }
        }
    }
  • 相关阅读:
    openVolumeMesh example 程序学习
    使用字符串创建java 对象
    HDU-1501-Zipper
    UVA-10285-Longest Run on a Snowboard
    HDU-2182-Frog
    HDU-2044-一只小蜜蜂
    POJ-1163-The Triangle
    HDU-1159-Common Subsequence
    HDU-2069-Coin Change
    HDU-4864-Task
  • 原文地址:https://www.cnblogs.com/flaaash/p/5274323.html
Copyright © 2011-2022 走看看