首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将线程ID传递给SetWindowsHookEx

将线程ID传递给SetWindowsHookEx
EN

Stack Overflow用户
提问于 2019-02-18 06:38:13
回答 1查看 596关注 0票数 1

我的两个API调用是:

代码语言:javascript
复制
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" _
  Alias "SetWindowsHookExA" (ByVal idHook As Long, _
                             ByVal lpfn As Long, _
                             ByVal hmod As Long, _
                             ByVal dwThreadId As Long) As Long

Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long

我的钩子键盘功能:

代码语言:javascript
复制
Public Sub HookKeyboard()
    Dim ThreadID As Long
    ThreadID = GetCurrentThreadId

    KeyboardHandle = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardCallback, Application.Hinstance, ThreadID)

    Call HookedInitalize
End Sub

不知为什么我的钩子没抓到。如果我用0替换ThreadID,表示钩子是系统范围的,那么钩子就会捕获。但是,当我试图将其限制在应用范围内时,它并没有被捕获。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 06:43:19

WH_KEYBOARD_LL是一个全局钩子,所以必须将0作为线程ID传递。它不会以任何其他方式工作。

您可以在函数中看到这一点;特别是在备注部分中,它枚举钩子类型及其作用域。

还要注意:如果在尝试使用非零线程ID调用Err.LastDllError之后调用SetWindowsHookEx,您将看到错误ERROR_GLOBAL_ONLY_HOOK,提供了相同的信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54741665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档