惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 许明会

异步编程,采用WorkgroupWorker,async和await关键字 OCR图像识别技术-Asprise OCR 关于委托,事件和类的设计准则 JavaScript能干什么? C#泛型代理、泛型接口、泛型类型、泛型方法 Delegate, Method as Parameter. DES对称性加密 利用委托实现异步调用 通过Windows组策略限制证书组织流氓软件的安装运行 枚举\位域\结构综合实验 - 许明会 - 博客园 public static void Invoke (Action action) C#编写WIN32系统托盘程序 C#的互操作性:缓冲区、结构、指针 SQLServer异步调用,批量复制 Python体验(10)-图形界面之计算器 Python体验(09)-图形界面之Pannel和Sizer Python体验(08)-图形界面之工具栏和状态栏 Python体验(07)-图形界面之菜单 Javascript猜数字游戏
C#利用WIN32实现按键注册
许明会 · 2016-03-14 · via 博客园 - 许明会
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);

        }
    }
}