RegisterHotKey这个是注册热键
按下热键时调用ProcessHotkey()函数
GetKeyState
GetAsyncKeyState
判断函数调用时指定虚拟键的状态
WM_HOTKEY 获取热键消息
GetKeyboardState该函数将256个虚拟键的状态拷贝到指定的缓冲区中
GetKeyboardType获取键盘的类型信息
GetKeyboardLayout GetKeyboardLayoutA取得一个句柄,描述指定应用程序的键盘布局
ActivateKeyboardLayout 激活键盘布局
GetKeyNameTextA GetKeyNameText该函数检取表示键名的字符串
LoadKeyboardLayout LoadKeyboardLayoutA该函数给系统中装入一种新的键盘布局
MapVirtualKeyA MapVirtualKey定义一个键的扫描码或虚拟键码
SetKeyboardState该函数拷贝一个存放键盘键状态的256字节的数组到调用线程的键盘输入状态表中
拦截系统热键消息
SendMessage
使用SendMessage向编辑框窗口发送WM_GETTEST消息,可以轻易获取到编辑框的内容(就算这个窗口不属于同一进程)。
---------------------------------------注册表常用中断--------------------------------------
注册表常用中断
RegQueryvalueA
RegQueryvalueExA
RegQueryValueEx找回所打开注册表键所关联的一个给定值的类型和数据
RegOpenKeyExA函数功能描述:打开一个制定的注册表键
----------------------------------------一些函数的用法--------------------------------------
C# code//API这么定义 [DllImport("user32.dll", SetLastError=true)]publicstaticexternbool RegisterHotKey(
IntPtr hWnd,//要定义热键的窗口的句柄int id,//定义热键ID(不能与其它ID重复)int fsModifiers,//标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效int vk//定义热键的内容 );
[DllImport("user32.dll", SetLastError=true)]publicstaticexternbool UnregisterHotKey(
IntPtr hWnd,//要取消热键的窗口的句柄int id//要取消热键的ID );
C# code//Load事件中注册热键privatevoid MainForm_Load(object sender, EventArgs e)
{
RegisterHotKey(this.Handle,312,0x2, (int)Keys.F12);
RegisterHotKey(this.Handle,311,0x2, (int)Keys.F11);
RegisterHotKey(this.Handle,310,0x2, (int)Keys.F10);
}
C# code//重写系统方法 监视键盘输入constint WM_HOTKEY=0x0312;//重写WndProc()方法,通过监视系统消息,来调用过程protectedoverridevoid WndProc(ref Message m)//监视Windows消息 {//如果m.Msg的值为0x0312那么表示用户按下了热键switch (m.Msg)
{case WM_HOTKEY: ProcessHotkey(m);//按下热键时调用ProcessHotkey()函数break;
}base.WndProc(ref m);//将系统消息传递自父类的WndProc }privatevoid ProcessHotkey(Message m)//按下设定的键时调用该函数 {
IntPtr id= m.WParam;//IntPtr用于表示指针或句柄的平台特定类型int sid= (int)id;switch (sid)
{case310: Tsm_StartOp_Click(newobject(),new EventArgs());break;case311: Tsm_PauseOp_Click(newobject(),new EventArgs());break;case312: Tsm_LoginOp_Click(newobject(),new EventArgs());break;
}
}
-------------------------------=activatekeyboardlayout=----------------------------------------
函数功能:激活键盘布局。该函数windows nt和windows 95中的实现有很大不同。本参考页中首先给出了完整的windows nt的实现,下来又给出了windows 95版本的实现,以便大家更好地了解二者的区别。在windows nt中activatekeyboadlayout函数激活一种不同的键盘布局,同时在整个系统中而不仅仅是调用该函数的进程中将该键盘布局设为活动的。
函数原型:hkl activatekeyboardlayout( hkl hkl,uint flags);
参数:
hkl:将被激活的键盘布局的句柄。该布局必须先调用leadkeyboadlayout函数装入,该参数必须是键盘分局的句柄,或是如下的值中的一种:
hkl_next:在系统保持的,己装入的布局的循环链表中,选择下一布局。
hkl_prev:在系统保持的,已装入的布局的循环链表中,选择前一布局。
flags:定义键盘布局如何被激活。该参数可取如下的一些值:
lfreorder:若该位被设置,则已装入的键盘布局的循环链路表将被重新排序。若该位没有设置,则循环链路表的顺序不变。例如,若用户激活了英语键盘布局,同时依序装入了法语、德语、西班牙语键盘布局,然后通过设置klf_reorde位激活德语键盘布局,则会产生如下顺序:德语、英语、法语、西牙语键盘布局。若激活德语键盘布局时未设置klf_reorder位,则产生如下的键盘布局的键盘布局序列:德语、西班牙语、英语、法语。若装入的键盘布局少于三种,则该标志域的值不起作用。
klf_setforprocess:在windows nt 5.0以上版本中使用。该参数用于整个进程中激活指定的键盘布,并向当前进程的所有线程发送wm_inputlangchange消息。
klf_unloadprevlous:卸载先前活动的键盘布局。
返回值:如果函数调用成功,返回值为前一键盘布局的句柄。否则,返回值为零。若要获得更多多错误信息,可调用getlasterror函数。
备注:在任一时刻可以装入多种键盘布局,但一次仅能激活一种布局。装入多种键盘布局使得可以快速地在多种布局之间切换。windows 95 activatekeyboadlayout函数为当前线程设置输入语言。该函数接受一个键盘布局句柄,该句柄标识键盘的一个局部的和物理布局。
速查:windows nt:3.1及以上版本;windows:95及以上版本;windows ce:不支持;头文件:winuser.h;库文件:user32.lib。
API说明内容收集于互联网,本人做了汇总
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课