易语言HOOKAPI钩子操作代码实例

  .版本 2

  .程序集 窗口程序集1

  .程序集变量 钩子地址, 整数型

  .程序集变量 原始数据, 字节集

  .程序集变量 OldProtect, 整数型

  .子程序 _按钮3_被单击

  信息框 (“这是一个测试本地HOOK”, 0, “如果挂钩了,本文本就会变化!”)

  .子程序 _按钮1_被单击

  .局部变量 值, 字节集

  钩子地址 = 取函数地址 (取模块句柄 (“User32.dll”), “MessageBoxA”)

  .如果真 (钩子地址 = 0)

  信息框 (“无法获取函数地址!!!”, 0, )

  返回 ()

  .如果真结束

  修改虚拟保护 (钩子地址, 8, 64, OldProtect)

  原始数据 = 指针到字节集 (钩子地址, 8)

  值 = { 184 }

  写到内存 (值 + 到字节集 (&MessageBoxA) + { 255, 224 }, 钩子地址, 8)

  .子程序 MessageBoxA, 整数型

  .参数 hWnd, 整数型, , 窗口句柄

  .参数 lpText, 文本型, , 提示文本

  .参数 lpCaption, 文本型, , 信息标题

  .参数 uType, 整数型, , 按钮类型

  .局部变量 值, 字节集

  lpText = lpText + “----lpText-----挂钩成功!”

  lpCaption = lpCaption + “-----lpCaption----挂钩成功!”

  .如果真 (取字节集长度 (原始数据) > 0)

  写到内存 (原始数据, 钩子地址, )

  .如果真结束

  建立消息框 (hWnd, lpText, lpCaption, uType)

  值 = { 184 }

  写到内存 (值 + 到字节集 (&MessageBoxA) + { 255, 224 }, 钩子地址, 8)

  返回 (0)

  .子程序 _按钮2_被单击

  .如果真 (取字节集长度 (原始数据) > 0)

  写到内存 (原始数据, 钩子地址, )

  .如果真结束