سؤال

نحن نعمل على تطبيق .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` للحصول على الوحدة النمطية لتمريرها. ربما جرب ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top