Chiamando SetWindowsHookEx all'interno debugger VS2008 restituisce sempre NULL
-
21-09-2019 - |
Domanda
stiamo lavorando su un'applicazione .NET che fa un gancio basso della tastiera di livello. Quando chiamiamo il SetWindowsHookEx in esecuzione all'interno del debugger la chiamata sempre sicuro.
Quando si esegue dal tutto eseguibile compilato funziona bene. Se ci attacchiamo al processs il il SetWindowsHookEx è stato chiamato tutto funziona troppo.
Ho letto da qualche parte (non ricordo) che VS fa già un hook di tastiera di basso livello, ma questo non dovrebbe essere un problema in quanto v'è la funzione di CallNextHook.
Qualcuno sa che cosa sta succedendo?
EDIT:. Il codice è abbastanza straigfoward, l'eccezione viene generata all'interno del debugger, ma non al di fuori
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
Soluzione
Un'ipotesi potrebbe essere che VS è in esecuzione il processo .vshost.exe che possono apparire in modo diverso in riflessione, ma non posso dirlo con certezza. Usiamo 'Process.GetCurrentProcess (). MainModule` per scaricare il modulo di passare. Forse dare che una prova.