键盘过滤
A. 键盘输入截获的基本原理
这个,要上课了。
代码,要建DLL,要调DLL,也要上课。
WINDOWS系统就是消息处理系统,你要用钩子程序去截获。可能的截获点有:
WH_CALLWNDPROC 窗口函数的过滤函数
WH_CBT 计算机培训过滤函数
WH_DEBUG 调试过滤函数
WH_GETMESSAGE 获取消息过滤函数
WH_HARDWARE 硬件消息过滤函数
WH_JOURNALPLAYBACK 消息重放过滤函数
WH_JOURNALRECORD 消息记录过滤函数
WH_MOUSE 鼠标过滤函数
WH_MSGFILTER 消息过滤函数
WH_SYSMSGFILTER 系统消息过滤函数
WH_KEYBOARD 键盘过滤函数
键盘输入截获:
WINDOW调用挂接的反调函数时总是先调用挂接链首的那个函数,因此必须将键盘挂钩函数利用函数SetWindowsHookEx()将其挂接在函数链首。
如果消息需要传统给下一个函数,可调用API函数的CallNextHookEx()来实现,如果不传递直接返回即可。
DLL:
#include "windows.h"
int FAR PASCAL LibMain(HANDLE hMole,UINT wDataSeg, UINT cbHeapSize,LPSTR lpszCmdLine);
int WINAPI WEP(int bSystemExit);
int WINAPI InitHooksDll(HWND hwndMainWindow);
int WINAPI InstallFilter(BOOL nCode);
LRESULT CALLBACK KeyHook(int nCode,WORD wParam,DWORD lParam);
static HANDLE hInstance; // 全局句柄
static HWND hWndMain; // 主窗口句柄
static int InitCalled=0; // 初始化标志
static HHOOK hKeyHook;
FARPROC lpfnKeyHook=(FARPROC)KeyHook;
BOOL HookStates=FALSE;
int FAR PASCAL LibMain( HANDLE hMole, UINT wDataSeg, UINT cbHeapSize, LPSTR lpszCmdLine)
{
if (cbHeapSize!=0)
UnlockData(0);
hInstance = hMole;
return 1;
}
int WINAPI WEP (int bSystemExit)
{ return 1;}
int WINAPI InitHooksDll(HWND hwndMainWindow)
{
hWndMain = hwndMainWindow;
InitCalled = 1;
return (0);
}
int WINAPI InstallFilter(BOOL nCode)
{ if (InitCalled==0)
return (-1);
if (nCode==TRUE)
{
hKeyHook=SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)lpfnKeyHook,hInstance,0);
HookStates=TRUE;
}
else
{
UnhookWindowsHookEx(hKeyHook);
HookStates=FALSE;
}
return(0);
}
LRESULT CALLBACK KeyHook(int nCode,WORD wParam,DWORD lParam)
{
static BOOL msflag=FALSE;
if(nCode>=0)
{
if(HookStates==TRUE)
{
if((wParam==0xff)||
(wParam==0x5b)||(wParam==0x5c)){
if((i==0x15b)||(i==0x15c)){ //如果是...值,按下处理
msflag=TRUE;
PostMessage(hWndMain,0x7fff,0x1,0x3L);
}
else if((i==0xc15b)||(i==0xc15c)){//按键抬起处理 msflag=FALSE;
PostMessage(hWndMain,0x7fff,0x2,0x3L);
}}}}
return((int)CallNextHookEx(hKeyHook,nCode,wParam,lParam));
}
应用程序:
InitHooksDll(hIMEWnd); //初始化DLL
InstallFilter(TRUE); //安装键盘回调函数
保存Micro按键的状态:
switch (iMessage)
{
case 0x7fff: //自定义消息类型
if(lParam==0x3L)
{//设置Micro键的状态
if(wParam==0x1)
MicroFlag=TRUE;
else if(wParam==0x2)
MicroFlag=FALSE;
}
break;
。。。。
case WM_KEYDOWN: // 按键按下处理
if(MicroFlag==TRUE)
{//Micro键按下
if((BYTE)HIBYTE(wParam)==0x5b)
{//Micro "["组合键 ......//按键功能处理 }
else if((BYTE)HIBYTE(wParam)==0x5d)
{//Micro "]"组合键 ......//按键功能处理 } } break;
。。。
退出时:
InstallFilter(FALSE);
B. 什么是键盘过滤驱动
键盘过滤驱动 是一个小程序 记录都按了什么键。
C. 键盘过滤驱动卸载时,系统蓝屏,该如何处理
蓝屏的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等。解专决办法:属
A、病毒的原因。使用腾讯电脑管家——病毒查杀。
B、 内存的原因。用橡皮擦把内存条的金手指擦拭一下,把氧化层擦掉,确保内存条安装、运行正常。
C、 机箱不清洁.CPU风扇积灰太多不能正常运行,造成CPU温度过高,用毛刷、电吹风将机箱内壁、CPU风扇、显卡风扇、主板上的积灰都清理一遍。
D、也有一种可能就是系统的不稳定,这时需要把电脑重启按F8进入启动菜单项,选择"启动到最后一次正确配置"。
D. VB.net怎么过滤键盘输入,如下图程序,请教该怎么写
PublicClassForm1
PrivateSubTextBox1_KeyPress(senderAsObject,eAsKeyPressEventArgs)HandlesTextBox1.KeyPress
IfNotIsNumeric(e.KeyChar)Then'判断是否为数字
e.Handled=True‘如果不是数字,取消操作,不显版示字符
EndIf
EndSub
EndClass
这样就好啦权
E. 键盘过滤器(Keyboard Filter )是什么
一般是木马。
F. 立式空调过滤网怎么拆上面按键盘百叶也可以拆开吗
可以拆卸,要把下面的固定螺丝拆卸下来才行,但没有 必要拆卸,不如把下面的风扇叶轮拆卸下来进行清洗。
G. 如果当焦点处于其他应用程序时,如何拦截键盘事件
WINDOWS的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接 各种反调函数(HOOK)的功能。这种挂钩函数(HOOK)类似扩充中断驱动程序,挂钩上 可以挂接多个反调函数构成一个挂接函数链。系统产生的各种消息首先被送到各种 挂接函数,挂接函数根据各自的功能对消息进行监视、修改和控制等,然后交还控 制权或将消息传递给下一个挂接函数以致最终达到窗口函数。WINDOW系统的这种反 调函数挂接方法虽然会略加影响到系统的运行效率,但在很多场合下是非常有用 的,通过合理有效地利用键盘事件的挂钩函数监控机制可以达到预想不到的良好效 果。
一、在WINDOWS键盘事件上挂接监控函数的方法
WINDOW下可进行挂接的过滤函数包括11种:
WH_CALLWNDPROC 窗口函数的过滤函数
WH_CBT 计算机培训过滤函数
WH_DEBUG 调试过滤函数
WH_GETMESSAGE 获取消息过滤函数
WH_HARDWARE 硬件消息过滤函数
WH_JOURNALPLAYBACK 消息重放过滤函数
WH_JOURNALRECORD 消息记录过滤函数
WH_MOUSE 鼠标过滤函数
WH_MSGFILTER 消息过滤函数
WH_SYSMSGFILTER 系统消息过滤函数
WH_KEYBOARD 键盘过滤函数
其中键盘过滤函数是最常用最有用的过滤函数类型,不管是哪一种类型的过滤函 数,其挂接的基本方法都是相同的。 WINDOW调用挂接的反调函数时总是先调用挂接链首的那个函数,因此必须将键盘挂 钩函数利用函数SetWindowsHookEx()将其挂接在函数链首。至于消息是否传递给函 数链的下一个函数是由每个具体函数功能确定的,如果消息需要传统给下一个函 数,可调用API函数的CallNextHookEx()来实现,如果不传递直接返回即可。 挂接函数可以是用来监控所有线程消息的全局性函数,也可以是单独监控某一线程 的局部性函数。如果挂接函数是局部函数,可以将它放到一个.DLL动态链接库中, 也可以放在一个局部模块中;如果挂接函数是全局的,那么必须将其放在一个.DLL 动态链接库中。挂接函数必须严格按照下述格式进行声明,以键盘挂钩函数为例:
int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam) 其中KeyboardProc为定义挂接函数名,该函数必须在模块定义文件中利用EXPORTS命 令进行说明;nCode决定挂接函数是否对当前消息进行处理;wParam和lParam为具体 的消息内容。
二、键盘事件挂接函数的安装与下载 在程序中可以利用函数SetWindowsHookEx()来挂接过滤函数,在挂接函数时必须指 出该挂接函数的类型、函数的入口地址以及函数是全局性的还是局部性的,挂接函 数的具体调用格式如下:
SetWindowsHookEx(iType,iProc,hInst,iCode) 其中iType为挂接函数类型,键盘类型为WH_KEYBOARD,iProc为挂接函数地址,hInst 为挂接函数链接库实例句柄,iCode为监控代码-0表示全局性函数。 如果挂接函数需要将消息传递给下一个过滤函数,则在该挂接函数返回前还需要调 用一次CallNextHookEx()函数,当需要下载挂接函数时,只要调用一次 UnhookWindowsHookEx(iProc)函数即可实现。 如果函数是全局性的,那么它必须放在一个.DLL动态链接库中,这时该函数调用方 法可以和其它普通.DLL函数一样有三种:
1.在DEF定义文件中直接用函数名或序号说明: EXPORTS WEP @1 RESIDENTNAME InitHooksDll @2 InstallFilter @3 KeyboardProc @4 用序号说明格式为:链接库名.函数名(如本例中说明方法为KEYDLL.KeyboardProc)。
2.在应用程序中利用函数直接调用: 首先在应用程序中利用LoadLibrary(LPSTR "链接库名")将动态链接库装入,并取得 装载库模块句柄hInst,然后直接利用GetProcAddress(HINSTANCE hInst,LPSTR "函 数过程名")获取函数地址,然后直接调用该地址即可,程序结束前利用函数 FreeLibrary( )释放装入的动态链接库即可。
3.利用输入库.LIB方法 利用IMPLIB.EXE程序在建立动态链接库的同时建立相应的输入库.LIB,然后直接在 项目文件中增加该输入库。
H. MFC CEditView 想过滤掉键盘消息,我的代码如下,但是过滤不掉键盘消息。求助,谢谢
首先WM_LBUTTONDOWN ,WM_RBUTTONDOWN ,WM_MOUSEMOVE这几个不是键盘消息是鼠标的消息 所以不能屏敝。。。
你可以这么写:
BOOL CMyEditView::PreTranslateMessage(MSG* msg)
{
CEditView::PreTranslateMessage(msg);
if(msg->message == WM_KEYDOWN)//这个是 要栏截的消息方试 在这里 要栏截键盘的消息则使用WM_KEYDOWN;
{
switch(msg->wParam)//这个才是要栏截的消息 如果不是则改成 msg->lParam
{
case VK_HOME: //要栏截的键盘的虚拟键码 在MSDN 查看更多的 如VK_RETRUN 这个是回车的
//这里是你要执行的代码。
break:
case VK_RETURN:
return false;//直接返回就屏敝了;
break:
还想栏截别的就继续写。。。
}
}
I. 有一首歌歌词是喉咙过滤香烟,键盘触碰指尖是什么歌
不辞而别的爱
咽喉过滤香烟 键盘触碰指尖 好像回到相遇那天但却只剩照片
当你化身成蝶 当我不做英杰 当我无奈做了魔邪你却不辞而别
不辞而别的爱 只留下了伤害 我以为我不会败不会败得这么快
为你做了魔鬼 为你此生不悔 我曾为了你的美甘愿一世做傀儡
你我终年不遇 感情无法继续 你曾说的最后一句竟是别再联系
你那冰冷面孔 让我如梦初醒 想起你曾的背影想到我全身发冷
为你记得笔记 为你写的日记 为你演的那场戏只能用心去回忆
是我太过认真 不想放你高飞 在这落魄的黄昏你却华丽转了身
我只是个小丑 不配把你拥有 现在我要为你嘶吼吼到全身发抖
你就像是气球 渴望天空自由 我想对你有所挽留你却不想回头
你已离开了我 记忆无法去抹 你就像那紫色烟火短暂难以割舍
想着你会出现 见我最后一面 没曾想到说句抱歉永远不再相见
时光能否倒走 光阴能否回首 难道因为我太丑才会走差这路口
终于看淡一切 看清你的世界 就让最后这一夜把这爱火全熄灭
是不是我太过坏 对你形成了依赖 是不是我太过爱 无法忽略你存在
恨天恨地恨执着 恨我跨不过爱河 忘情水还于孟婆 让我一世做邪魔
樱花会开会掉落 人会难过会犯错 不辞而别的软弱 请你说出为什么
梦里梦见梦不醒 画里画出画不懂 哪年哪日那夜景 如今只剩这背影
J. 电脑键盘过滤器问题
晕`没什么大惊小怪的`那个未知设备是你本机驱动没有装完`那个版keyboard 是个热键`也就是个快捷键权,比方说是控制电脑的声音大小的快捷键啊显示电池用量的大小之类的`不应担心`只要把本机所需的驱动装完就OK了`如果找不到本机驱动不需要安装也没什么的``