上节课视频教学我们封装了一个消息钩子的动态链接文件,这节课我们通过易语言主程序实现调用,从而对记事本外部窗口的的消息截获,换成我们的hook内容。首先我们封装一个开始截获和结束截获的方法。我们调用LoadLibraryA动态加载我们上节课封装的消息钩子动态链接文件msghook.dll
开始截获
.版本 2 .子程序 开始截获, 逻辑型 .参数 窗口句柄 .局部变量 hmod, 整数型 .局部变量 lpProc, 子程序指针 .局部变量 ThreadID, 整数型 .局部变量 hHook, 整数型 .如果真 (窗口句柄 = 0) 返回 (假) .如果真结束 .如果真 (GetPropA (窗口句柄, #prop) ≠ 0) ' 不等于0说明已经加载过钩子了 返回 (假) .如果真结束 ' 第一步 获取 Hookdll的 句柄 hmod = LoadLibraryA (取运行目录 () + “\msghook.dll”) ' 第二步 获取GetMsgProc 这个回调函数的 指针 lpProc = GetProcAddress (hmod, “GetMsgProc”) ' 第三部 获取截获窗口的线程ID ThreadID = GetWindowThreadProcessId (窗口句柄, 0) ' 给指定的窗口安装消息钩子,该窗口在收到postMessage的消息后会自动加载钩子函数所在的DLLmsghook.dll hHook = SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hmod, ThreadID) ' 释放dll FreeLibrary (hmod) ' 开始给窗口发送消息,通知msghook.dll子类化窗口过程,并传递钩子句柄过去 PostMessageA (窗口句柄, #MyMsgClass, 1, hHook) 返回 (hHook ≠ 0)
结束截获
.版本 2 .子程序 结束截获, 逻辑型 .参数 窗口句柄, 整数型 .局部变量 hHOOK, 整数型 .如果 (窗口句柄 = 0) 返回 (假) .否则 .如果结束 ' 取回钩子的句柄 hHOOK = SendMessageA (窗口句柄, #MyMsgClassHook, 0, 0) .如果真 (hHOOK = 0) ' 0说明窗口已经关闭了 返回 (真) .如果真结束 ' 通知窗口截获结束,恢复窗口过程 SendMessageA (窗口句柄, #MyMsgClass, 0, 0) 返回 (UnhookWindowsHookEx (hHOOK))
主程序调用开始截获
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
.局部变量 hwnd
hwnd = 取指定窗口句柄 (“无标题 - 记事本”)
.如果真 (hwnd = 0)
信息框 (“请打开一个空白记事本”, 0, , )
返回 ()
.如果真结束
.如果真 (开始截获 (hwnd))
信息框 (“开始截获消息”, 0, , “成功”)
.如果真结束
.子程序 _按钮2_被单击
结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
.子程序 取指定窗口句柄, 整数型
.参数 窗口标题, 文本型
返回 (FindWindowA (字符 (0), 窗口标题))
.子程序 __启动窗口_将被销毁
结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
百度网盘链接:https://pan.baidu.com/s/158ikKVjIwaoF4438MG4fhA
提取码:加QQ群:521068947 群文件下载
资源教程交流①群:521068947
511遇见QQ: 272586593