Вызов SetWindowsHookEx внутри отладчика VS2008 всегда возвращает NULL - PullRequest
0 голосов
/ 19 февраля 2010

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

2 голосов
/ 20 апреля 2010

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

...