Question

nous travaillons sur une application .Net qui fait un crochet du clavier de bas niveau. Lorsque nous appelons le SetWindowsHookEx en cours d'exécution dans le débogueur l'appel échouent toujours.

Lors de l'exécution de l'exécutable compilé tout fonctionne très bien. Si nous attachons à la traitee la SetWindowsHookEx l'a appelé tout fonctionne aussi.

Je l'ai lu quelque part (je ne me souviens pas) que VS fait déjà un crochet du clavier de bas niveau, mais cela ne devrait pas être un problème car il y a la fonction CallNextHook.

Quelqu'un sait ce qui se passe?

EDIT:. Le code est assez straigfoward, l'exception est levée à l'intérieur débogueur, mais pas à l'extérieur

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
Était-ce utile?

La solution

Une estimation pourrait être que VS exécute le processus de .vshost.exe qui pourraient apparaître différemment dans la réflexion, mais je ne peux pas dire à coup sûr. Nous utilisons « Process.GetCurrentProcess (). MainModule` pour obtenir le module pour passer. Peut-être donner un essai.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top