python钩子函数教学 钩子函数使用场景( 四 )


3:建立程序主文件
我们在上面作的所有得工作都是为现在的主程序打得基础 。其实当我们完成了Dll文件后,剩下的就是调用设置钩子函数:InstallHook。如果你对windows编程十分的熟悉,那么你可以在你任何需要的时候来调用InstallHook 。但是在你必须记住在你退出程序的时候你需要调EndHook以便释放你所装入的钩子函数 。现在我在建立了一个hookspy.cpp,并将生成好的hookdll.dll和hookdll.lib拷贝到从一个目录下 , 并建立一个hookspy的项目工程 。将hookspy.cpp,hookdll.dll,hookdll.lib,hookdll.h插入到项目工程中去 。然后在建立windows窗口时就将钩子设置,在退出程序时退出钩子函数 。比如:
case WM_CREATE:
InstallHook(TRUE);
break;
case WM_DESTROY: //terminate the program
EndHook();
PostQuitMessage(0);
break;
python-第十三课-函数实例-万花筒本节中的万花筒通过彩色随机螺旋线来实现 。我们首先定义一个函数draw(),这个函数用来绘制一个螺旋线,函数中的画笔起始位置的坐标为函数的两个形参 。然后调用函数的时候使用一个for循环来实现多次调用函数,同时,函数的两个实参由random模块生成的随机数组成 。
如何向钩子过程传递参数首先说明一点,你的问题问得不是很恰当,因为钩子函数是回调函数,由系统规定参数,并传递参数,由你写好内容,然后由系统在一定触发条件下调用
例如你建立的是WH_MOUSE钩子, 那么MouseProc的三个参数由操作系统(实际上是WIN32 平台)传递进来,意义分别是nCode怎么处理消息, wParam消息标识, lParam是一个MOUSEHOOKSTRUCT结构指针,而我们要做的就是利用这三个参数来完成自己想实现的功能,这正是回调函数的意义!
一般做钩子用到三个函数, 主要解决的是钩子函数的定义:
钩子有局部和远程两种类型, 与钩子相关的函数有:
1. 建立钩子:SetWindowsHookEx, 其四个参数分别为钩子类型, 钩子函数地址, 钩子函数所在DLL的实例句柄,安装钩子后想监控的线程的ID号, 返回参数为钩子句柄
2. UnhookWindowsHookEx, 参数只有一个,为要卸载的钩子句柄
3. 钩子函数(名称任意), 三个参数, 具体意义与钩子类型有关
下面再举一个简单例子:
比如你想写一个程序, 当鼠标移到哪里时就在主程序中显示鼠标所在窗口的名称
--------------------
(1)如果鼠标只是局限在窗口内, 那么以上1, 2, 3三个函数均写在运行的主程序中, 比如函数1可以写在按下某个按钮的消息响应函数中,函数 2 写在松开按扭的消息响应函数中,函数 3 只要不写在别的函数中就行, 因为它本生就是一个要定义的独立函数
(2)如果鼠标可以在屏幕任意位置移动, 那么以上函数1, 2位置同(1), 但函数3要写在一个另外写的DLL里, 因为此时安装的是全局钩子, 为了达到获取窗口名称的目的, 在DLL里可能还要做一些其他工作,比如设置共享段, 关于这些这里不细说了
------------------------
如果你想问的是如何填充SetWindowsHookEx的参数 或 钩子函数的三个参数的具体意义, 那么可以参考MSDN, 因为参数与钩子类型, 要挂钩的消息有关
python(16):函数(3)==================================
将列表传递给函数后 , 函数就能直接访问其内容
假设有一个用户列表,要问候其中的每位用户
将列表传递给函数后 , 函数就可对其进行修改,在函数中对这个列表所做的任何修改都是永久性的
一家为用户提交的设计制作3D打印模型的公司,需要打印的设计存储在一个列表中,打印后转移到另一个列表中 。
有时候需要禁止函数修改列表,为解决这个问题,可想向函数传递列表的副本而不是元件;这样函数所做的任何修改都只影响副本,不影响元件

推荐阅读