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 = , Control = , Shift = , Win =
} public delegate void HotkeyCallbackHandler();
int keyId = ;
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); }
}
}

C#利用WIN32实现按键注册的更多相关文章

  1. ASP.net(C#)利用SQL Server实现注册和登陆功能

    说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...

  2. 怎么利用WinPE恢复系统注册表?

    我们的电脑总是会遇到各种各样的问题,最好用的方式就是电脑重装,重装系统的方式有很多,光盘安装.硬盘安装.U盘安装等.但是碰到电脑系统瘫痪无法启动,甚至连安全模式也进不了的时候,你的光盘.硬盘就没有用处 ...

  3. 如何利用WordPress创建自定义注册表单插件

    来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...

  4. 利用 Win32 启动和检测 UWP App 的方法

    一种启动和检测 UWP 应用的方法 背景 我们发布过多款 UWP 平台的同类型 App ,最近有一个需求:用传统 Win32 程序启动我们的 UWP 程序.因为我们的每一个UWP App在客户机器上都 ...

  5. 利用_winreg模块在注册表中分析无线访问热点

    _winreg.OpenKey(key, sub_key, res, sam)     key是一个已经打开的键,或者是HKEY_CLASSES_ROOT.HKEY_CURRENT_USER.HKEY ...

  6. AutoCAD C# 利用反射导出所注册的命令

    主函数导出某一程序集AutoCAD 注册命令 /// <summary> ///提取所有的命令 /// </summary> /// <param name=" ...

  7. 利用etcd实现服务注册和服务发现

    文章目录 服务注册 服务发现 协议编写 服务端实现 客户端实现 实验结果 参考文章 服务注册 主要逻辑在go func函数里面,先是去etcd获取一下服务,没有获取到的话就注册进去. package ...

  8. 1、win32创建窗口函数(windows程序内部运行机制)

    利用win32创建窗口函数,主要操作步骤为: 1.设计一个窗口类 2.注册窗口类 3.创建窗口 4.显示及窗口更新 5.消息循环 6.窗口过程函数   (1)设计一个窗口类 设计窗口类,这样的类型已经 ...

  9. win32创建窗口函数(windows程序内部运行机制)

    利用win32创建窗口函数,主要操作步骤为: 1.设计一个窗口类 2.注册窗口类 3.创建窗口 4.显示及窗口更新 5.消息循环 6.窗口过程函数   (1)设计一个窗口类 设计窗口类,这样的类型已经 ...

随机推荐

  1. 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)

    文本与程序的几种打开方法 文本文件的打开方法 函数名: cmd 命令 函数描述: 执行CMD命令 函数原型: cmd(cmdstr) 命令(cmd命令) 函数参数: cmdstr:cmd命令,此处执行 ...

  2. SQL EXEC 命令用法

    EXEC命令有两个用法: 1.执行一个存储过程,或者执行一个动态批次. 2.批次是一个内容为SQL语句的字符串. 举列子: 1.exec name_proc :没有参数 exec name_proc ...

  3. quartz(1)

    关于定时任务的操作方法,java语言本身具有 Timer 来解决,但Timer 作用起来不是特别的舒服,由于项目的需要,使用了Quartz 这个调度框架,现把学习过程记录下来,方便以后查阅. 本教程是 ...

  4. Here's to the crazy ones.

    Here's to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square h ...

  5. 求第K大数

    1.排序找第K个数 2.快速排序分块  时间复杂度  2呢

  6. Makefile简易教程

    本文部分内容引用: 中文维基百科. 一个简单的Makefile教程. Makefile简介 在软件开发中,make通常被视为一种软件构建工具.该工具主要经由读取一种名为"makefile&q ...

  7. Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...

  8. 【转】Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing

    最近在看Java,在编译写书上一个例子时,由于书上的代码只有一部分,于是就自己补了一个内部类.结果编译时出现:No enclosing instance of type E is accessible ...

  9. Lua 调用 Opencv 的方法

    Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lu ...

  10. hadoop streaming 多路输出 [转载]

    转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...