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)设计一个窗口类 设计窗口类,这样的类型已经 ...
随机推荐
- 【转】对MVC、MVP、MVVM的懂得
[转]对MVC.MVP.MVVM的懂得 转载地址:http://www.myexception.cn/vc-mfc/1612241.html 对MVC.MVP.MVVM的理解 最近看了一堆js框架的文 ...
- null和undefined区别(转)
目前,null和undefined基本是同义的,只有一些细微的差别. null表示"没有对象",即该处不应该有值.典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. ...
- Android的Notification使用注意事项
看<Android开发-第一行代码>这本书,读到创建系统通知(Notification)的时候,发现若干主要方法均已经过期,于是找了一下官方的开发指南,进入此url:http://deve ...
- ubantu svn 安装、卸载、配置hooks
1.安装之前先看是否已经安装了 svn -version 若已经安装会有以下提示,若没有安装,进行下一步 若想卸载了执行命令 ( sudo apt-get remove --purge subvers ...
- Django后台post请求中的csrf token
使用Requests库操作自己的Django站点,post登陆admin页面返回403,serverlog显示csrf token not set. csrf token是get登陆页面时服务器放在c ...
- oracle rman恢复数据库 方式恢复到异地数据库
目的:从某个环境中,获取相关文件,放到异地机器使用rman 恢复. 情况说明:XX系统使用的是oracle数据库,现已从服务器拉下来相关文件,依靠这些文件来早本地的测试机上恢复数据库,方便进行数据 ...
- jsp xml servlet
什么都懂一点,什么都不精通!!
- linux 并发 RCU
What is RCU, Fundamentally? https://lwn.net/Articles/262464/ If you can fill the unforgiving secondw ...
- 从头开始db-oracle
rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpmrpm -ivh http: ...
- mybatis generator使用(基于maven)
1.添加maven依赖 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId&g ...