|
开始截获
- .版本 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), 窗口标题))
- .子程序 __启动窗口_将被销毁
- 结束截获 (取指定窗口句柄 (“无标题 - 记事本”))
复制代码
|
|