Llamando SetWindowsHookEx dentro VS2008 depurador siempre devuelve NULL
-
21-09-2019 - |
Pregunta
estamos trabajando en una aplicación .NET que hace un gancho bajo nivel de teclado. Cuando llamamos a la SetWindowsHookEx se ejecuta dentro del depurador de la llamada siempre fallan.
Cuando se ejecuta desde el ejecutable compilado todo funciona bien. Si le damos a la processs la SetWindowsHookEx la que se ha llamado todo funciona también.
en algún lugarHe leído (no recuerdo) que VS ya hace un gancho de teclado de bajo nivel, pero esto no debería ser un problema, ya que es la función CallNextHook.
Alguien sabe lo que está pasando?
EDIT:. El código es bastante straigfoward, la excepción se produce en el interior del depurador, pero no fuera
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
Solución
Una conjetura podría ser que VS se está ejecutando el proceso .vshost.exe que podrían aparecer de forma diferente en la reflexión, pero no puedo decir con seguridad. Utilizamos 'Process.GetCurrentProcess (). MainModule` para obtener el módulo de pasar. Tal vez que dan una oportunidad.