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 = , 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实现按键注册的更多相关文章
- ASP.net(C#)利用SQL Server实现注册和登陆功能
说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...
- 怎么利用WinPE恢复系统注册表?
我们的电脑总是会遇到各种各样的问题,最好用的方式就是电脑重装,重装系统的方式有很多,光盘安装.硬盘安装.U盘安装等.但是碰到电脑系统瘫痪无法启动,甚至连安全模式也进不了的时候,你的光盘.硬盘就没有用处 ...
- 如何利用WordPress创建自定义注册表单插件
来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...
- 利用 Win32 启动和检测 UWP App 的方法
一种启动和检测 UWP 应用的方法 背景 我们发布过多款 UWP 平台的同类型 App ,最近有一个需求:用传统 Win32 程序启动我们的 UWP 程序.因为我们的每一个UWP App在客户机器上都 ...
- 利用_winreg模块在注册表中分析无线访问热点
_winreg.OpenKey(key, sub_key, res, sam) key是一个已经打开的键,或者是HKEY_CLASSES_ROOT.HKEY_CURRENT_USER.HKEY ...
- AutoCAD C# 利用反射导出所注册的命令
主函数导出某一程序集AutoCAD 注册命令 /// <summary> ///提取所有的命令 /// </summary> /// <param name=" ...
- 利用etcd实现服务注册和服务发现
文章目录 服务注册 服务发现 协议编写 服务端实现 客户端实现 实验结果 参考文章 服务注册 主要逻辑在go func函数里面,先是去etcd获取一下服务,没有获取到的话就注册进去. package ...
- 1、win32创建窗口函数(windows程序内部运行机制)
利用win32创建窗口函数,主要操作步骤为: 1.设计一个窗口类 2.注册窗口类 3.创建窗口 4.显示及窗口更新 5.消息循环 6.窗口过程函数 (1)设计一个窗口类 设计窗口类,这样的类型已经 ...
- win32创建窗口函数(windows程序内部运行机制)
利用win32创建窗口函数,主要操作步骤为: 1.设计一个窗口类 2.注册窗口类 3.创建窗口 4.显示及窗口更新 5.消息循环 6.窗口过程函数 (1)设计一个窗口类 设计窗口类,这样的类型已经 ...
随机推荐
- 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)
文本与程序的几种打开方法 文本文件的打开方法 函数名: cmd 命令 函数描述: 执行CMD命令 函数原型: cmd(cmdstr) 命令(cmd命令) 函数参数: cmdstr:cmd命令,此处执行 ...
- SQL EXEC 命令用法
EXEC命令有两个用法: 1.执行一个存储过程,或者执行一个动态批次. 2.批次是一个内容为SQL语句的字符串. 举列子: 1.exec name_proc :没有参数 exec name_proc ...
- quartz(1)
关于定时任务的操作方法,java语言本身具有 Timer 来解决,但Timer 作用起来不是特别的舒服,由于项目的需要,使用了Quartz 这个调度框架,现把学习过程记录下来,方便以后查阅. 本教程是 ...
- 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 ...
- 求第K大数
1.排序找第K个数 2.快速排序分块 时间复杂度 2呢
- Makefile简易教程
本文部分内容引用: 中文维基百科. 一个简单的Makefile教程. Makefile简介 在软件开发中,make通常被视为一种软件构建工具.该工具主要经由读取一种名为"makefile&q ...
- Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...
- 【转】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 ...
- Lua 调用 Opencv 的方法
Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lu ...
- hadoop streaming 多路输出 [转载]
转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...