本帖最后由 minews 于 2020-11-18 19:49 编辑
复习一下CBT钩子,下面的代码直接调用myMessageBox("测试内容","测试标题") 即可
写完发现TC连续弹出多个MessageBox不关闭,大约到8个就会崩溃.....测试系统为win10.
- var HHook, h
- var WH_CBT = 5
- var HCBT_ACTIVATE = 5
- var HCBT_CREATEWND = 3
- function myMessageBox(content, caption)
- installHook()
- dllcall("User32.dll", "long", "MessageBoxW", "long", windowgetmyhwnd(), "wchar *", content, "wchar *", caption, "long", 0)
-
- end
- function installHook()
- var hmod = dllcall("kernel32.dll", "long", "GetModuleHandleA", "long", 0)
- h = callbackmalloc("hookProc", "hookproc")
- traceprint("hookproc:" & h)
- var threadId = dllcall("kernel32.dll", "long", "GetCurrentThreadId")
- HHook = dllcall("user32.dll", "long", "SetWindowsHookExA", "long", WH_CBT, "callback", h, "long", hmod, "long", threadId)
- traceprint("HHook:" & HHook)
- end
- function hookProc(nCode, wParam, lParam)
- if(nCode == HCBT_ACTIVATE)
- if(windowgetclass(wParam) == "#32770" && wParam != windowgetmyhwnd())
- unInstallHook()
- var x, y
- windowgetpos(windowgetmyhwnd(), x, y)
- windowsetpos(wParam, x + 100, y + 100)
- end
- end
- return dllcall("user32.dll", "long", "CallNextHookEx", "long", HHook, "long", nCode, "long", wParam, "long", lParam)
- end
- function unInstallHook()
- var ret = dllcall("user32.dll", "long", "UnhookWindowsHookEx", "long", HHook)
- traceprint("UnhookWindowsHookEx:" & ret)
- callbackfree(h)
- end
复制代码
|