استدعاء setwindowshookex داخل VS2008 Debugger يعيد دائما فارغة
-
21-09-2019 - |
سؤال
نحن نعمل على تطبيق .NET يقوم بخطاف لوحة المفاتيح منخفض المستوى. عندما نسمي SetWindowShookex الذي يعمل داخل التصحيح ، فإن المكالمة تفشل دائمًا.
عند الركض من كل شيء قابلة للتنفيذ يعمل بشكل جيد. إذا نعلق على العمليات ، فقد تم تسمية SetWindowshookex بكل شيء يعمل أيضًا.
لقد قرأت في مكان ما (لا أستطيع أن أتذكر) أن VS يقوم بالفعل بخطاف لوحة مفاتيح منخفض المستوى ولكن لا ينبغي أن يكون هذا مشكلة لأن هناك وظيفة callnexthook.
شخص ما يعرف ماذا يحدث؟
تحرير: الكود جميل Straigfoward ، يتم إلقاء الاستثناء داخل التصحيح ولكن ليس بالخارج.
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
المحلول
قد يكون التخمين هو أن VS تعمل على تشغيل .vshost.exe التي قد تظهر بشكل مختلف في التفكير ، لكن لا يمكنني القول بالتأكيد. نحن نستخدم 'process.getCurrentProcess (). mainmodule` للحصول على الوحدة النمطية لتمريرها. ربما جرب ذلك.