hook什么意思
hook作名词时意思是“挂钩,吊钩”,作及物动词时意思是“钩住;引上钩”,作不及物动词时意思是“钩住;弯成钩状”。
读音:英[h?k],美[h?k]
例句:ONeofhisjacketshungfromahook.
他的一件夹克衫挂在衣钩上。
词汇搭配:
hookonto钩住,挂在…上,依附于
hardhook重钩拳
coathook衣钩
deLiverahook打钩拳
1、hanger
读音:英[h???(r)],美[h???r]
释义:n.挂钩;衣架;悬挂物
例句:Thehairdresserhabituallyhangsthehairdryeronthehanger.
理发师习惯性地将吹风挂到挂钩上。
2、crook
读音:英[kr?k],美[kr?k]
(1)n.钩;曲柄杖;弯曲;<口>骗子
(2)vi.弯曲;诈骗
(3)vt.使成钩状;使弯曲
例句:Bythecrook,thecooklookedthroughacookbookbeforemakinghookedcookies.
在溪边,厨子在做钩形饼干之前查阅了一本食谱。
钩子问题.
以前做过编程,但现在都忘个差不多了,给你查了一点,看能不能有帮助
HOOK编程与消息处理一2009-06-1416:02阅读本文需要一定的C++基础和windows编程基础,另外对动态链接库原理和机制也要有一定了解。我尽量讲解得简单明了一些。
因为考试系统项目中要对系统中的键盘消息进行处理,而WEB页面中对系统热键、功能键不能进行有效处理,如(ALT+F4ALT+TABLE等等),因此需要编写一个WIN32下的客户端程序,内嵌一个WebBrownser实现页面显示(或用CHtmlView对象实现,其实道理都是一样的),这样我可以在客户端程序框架中对键盘消息进行处理。
本文介绍的内容主要是利用动态链接库安装全局进程钩子,实现应用程序的主导控制,因此本文的范畴还是在COM相关领域中。#此前在首页部分显示#
关于Hook编程,以前我总是认为很神秘,因为黑客技术中经常用到HOOK,比如最常见的盗取密码。下面我们来一窥门径。
首先我们来简单了解一下窗口句柄和WINDOWS消息处理机制;
窗口是Windows应用程序中一个非常重要的元素,一个Windows应用程序至少要有一个窗口,称为主窗口。窗口是屏幕上的一块矩形区域,是Windows应用程序与用户进行交互的接口。在windows应用程序中,窗口是通过窗口句柄(HWND)来标识的。我们要对某个窗口进行操作,首先要得到这个窗口的句柄。句柄(HANDLE)是Windows程序中一个重要的概念,使用很频繁。在windows程序中有各种各样的资源(窗口、图标、光标等),系统在创那家这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄(图标句柄HICON、光标句柄HCURSOR、画刷句柄HBRUSH)。
Windows程序设计是一种完全不同于DOS方式的程序设计方法。它是一种事件驱动方式的程序设计模式,主要是基于消息的。例如当用户在窗口中画图的时候,按下鼠标左键,操作系统会感知这一事件,并将这一事件包装成一个消息,投递到应用程序消息队列中,然后应用程序通过调用GetMessage函数从消息队列中取出消息,然后调用DispatchMessage函数将这条消息调度给操作系统,操作系统会调用在设计窗口类时指定的应用程序窗口过程(WindowProc)对这一消息进行处理。
在实际应用中,可能要对某个特殊消息进行屏蔽,如在我的考试项目中要对键盘消息进行屏蔽,而鼠标消息不与处理。我们可以给我们的程序安装一个HOOK过程(钩子过程)来实现这一功能。在程序中,我们可以过SetWindowsHookEx函数来安装一个钩子过程。该函数声明如下:
HHOOKSetWindowsHookEx(
intidHook,//typeofhooktoinstall
HOOKPROClpfn,//addressofhookprocedure
HINSTANCEhMod,//handletoapplicationinstance
DWORDdwThreadId//identityofthreadtoinstallhookfor
SetWindowsHookEx函数的作用是安装一个应用程序定义的钩子过程,并将其放到钩子链中。应用程序可以安装多个钩子过程,对我们感兴趣的多个消息进行检查。这样多个钩子过程就形成了钩子链,最后安装的钩子过程总是排在该链的前面。如果调用成功,SetWindowsHookEx函数返回值就是所安装的钩子过程的句柄,否则返回NULL。
各参数的含义各位读者可以看下MSDN,MSDN中的英文也是很好读懂的,各位不要害怕。
第一个参数idHookMSDN中给出的含义是Specifiesthetypeofhookproceduretobeinstalled.中文意思就是指定将要安装的钩子过程的类型。在我的项目中因为要处理键盘消息,因此本文中我会将其设为WH_KEYBOARD。如果要处理鼠标消息可将其设为WH_MOUSE。
第二个参数lpfn指向相应钩子过程。如果参数dwThreadId为0,或者指定了一个其他进程创那家的线程的标识符,那么参数lpfn必须指向一个位于某动态接库中的钩子过程。否则,参数lpfn可以指向当前进程相关代码中定义的一个钩子过程。
第三个参数hMod指定lpfn指向的钩子过程所在DLL的句柄。如果参数dwThreadId指定的线程由当前进程创建,并且相应的钩子过程定义于当前进程相关的代码中,那么必须将此参数设为NULL。
第四个参数dwThreadId指定也钩子过程相关的线程标识。如果其值为0,那么安装的钩子过程将与桌面上运行的所有线程都相关。
关于进程内的钩子比较简单,大家参看MSDN中的MouseProc、CallNextHookEx以及上面的SetWindowsHookEx等函数的说明就可以实现。在这里我们要写一个应用全局钩子的应用程序,主要是我想在程序运行时对桌面运行的所有进程的键盘消息都进行屏蔽。好,我们现在建一个空的DLL工程名为HookTest,再建一个C++源文件HookTest.cpp,在源文件中写一个函数SetHook用以安装钩子过程,再写一个函数UnHook用以卸载钩子过程。代码如下:
LRESULTCALLBACKKeyboardProc(
intcode,//hookcode
WPARAMwParam,//virtual-keycode
LPARAMlParam//keystroke-messageinformation)
if(VK_F2==wParam)
SendMessage(hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(hKeyboardHook);
return1;
voidSetHook(HWNDhwnd)
hWnd=hwnd;
hKeyboardHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
voidUnHook()
if(hKeyboardHook)
SendMessage(hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(hKeyboardHook);
什么是HOOK啊????
HOOK就是 拦截 通过把一段重要的数据改为跳转然后在通过赋其他值再跳回去原来的地方就叫HOOK