Appel SetWindowsHookEx l'intérieur débogueur VS2008 retourne toujours NULL
-
21-09-2019 - |
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
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.