在VS2008调试器内调用SetWindowsHookEx始终返回NULL

时间:2010-02-19 10:40:06

标签: .net visual-studio debugging setwindowshookex

我们正在开发一个执行低级键盘挂钩的.Net应用程序。当我们调用在调试器内运行的SetWindowsHookEx时,调用总是失败。

从已编译的可执行文件运行时,一切正常。如果我们附加到进程,则调用SetWindowsHookEx一切都可以正常工作。

我已经读过某个地方(我记不起来),VS已经做了一个低级别的键盘钩子,但这不应该是一个问题,因为有CallNextHook函数。

有人知道发生了什么事吗?

编辑:代码非常困难,异常是在调试器内抛出但不在外面。

Public Sub New()
    m_callback = New NativeMethods.KeyboardHookDelegate(AddressOf KeyboardCallback)
End Sub

Public Sub Start()
    m_handle = NativeMethods.SetWindowsHookEx(NativeMethods.HookType.WH_KEYBOARD_LL, m_callback, Marshal.GetHINSTANCE(Reflection.Assembly.GetExecutingAssembly().GetModules()(0)).ToInt32, 0)
    If m_handle = 0 Then
        Throw New Exception()
    End If
End Sub

1 个答案:

答案 0 :(得分:2)

猜测可能是VS运行的.vshost.exe进程在反射中可能会有所不同,但我不能肯定地说。我们使用'Process.GetCurrentProcess()。MainModule`来传递模块。也许尝试一下。