Вызов SetWindowsHookEx внутри отладчика VS2008 всегда возвращает NULL

StackOverflow https://stackoverflow.com/questions/2295628

Вопрос

мы работаем над приложением .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
Это было полезно?

Решение

Можно предположить, что VS запускает процесс .vshost.exe, который в отражении может выглядеть по-другому, но я не могу сказать наверняка.Мы используем Process.GetCurrentProcess().MainModule, чтобы передать модуль.Может быть, стоит попробовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top