استجابة دقيقة لأحداث الكمبيوتر اللوحي / الماوس في ويندوز

StackOverflow https://stackoverflow.com/questions/1490011

  •  18-09-2019
  •  | 
  •  

سؤال

كيف يمكنني إخبار Windows بعدم القيام بمعالجة غير مفيدة مسبقا على أحداث القلم اللوحي؟

أنا برمجة في Python 2.6، استهدفت أجهزة الكمبيوتر اللوحي التي تعمل بنظام Windows 7 (على الرغم من أنني أود أن أعمل برنامجي مع القليل من التعديل على XP مع السبورة التفاعلية الذكية، ولتمستخدمي الماوس على Linux / Mac). لقد كتبت برنامجا خطاطيا في أحداث ماوس Windows العادية، WM_MOUSEMOVE وما إلى ذلك، ويكتب على قماش.

المشكلة هي أن رسائل الماوس يتم تشويهها قبل أن تصل إلى طلبي. لقد وجدت أنه إذا قمت بإجراء السكتات الدماغية الطويلة والتوقف مؤقتا بين السكتات الدماغية، فسيتم إرسال رسائل الماوس بشكل صحيح. ولكن إذا قمت بإجراء العديد من السكتات الدماغية القصيرة السريعة، فإن هناك شيء يقوم بمعالجة غير مفيدة مسبقا. على وجه التحديد، إذا قمت بإنشاء سكتة دماغية حوالي 10 بكسل، ثم قم بإجراء خلاف آخر حوالي خمس بكسل إلى يمين الأول، ثم تقارير WM_Mousedown الثانية التي تأتي من نفس المكان بالضبط كأول.

يبدو أن هذا يشبه نوعا ما من المعالجة المسبقة، وربما حتى لا يتم الخلط بين التطبيقات السذاجة عن النقرات المزدوجة. ولكن بالنسبة للتطبيق الخاص بي، حيث أريد استجابة مخلصة للغاية للإيماءات السريعة، إنها غير مفيدة.

لقد وجدت مرجعا إلى Atom MicrosofttabletpenserviceProperty Atom، وإلى طراز Window CS_DBLLKLKS، وقمت بإيقاف تشغيلها مع القطعة التالية من رمز Python:

hwnd = self.GetHandle()  
tablet_atom = "MicrosoftTabletPenServiceProperty" 
atom_ID = windll.kernel32.GlobalAddAtomA(tablet_atom)  
windll.user32.SetPropA(hwnd,tablet_atom,1)  
currentstyle = windll.user32.GetClassLongA(hwnd, win32con.GCL_STYLE)  
windll.user32.SetClassLongA(hwnd, win32con.GCL_STYLE, currentstyle & ~win32con.CS_DBLCLKS) 

لكن ليس لها أي تأثير.

حاولت كتابة ربط منخفض المستوى لسائق الماوس، مع setwindowshookex، لكنه لا يعمل - من الواضح أن رسائل الماوس قيد المعالجة مسبقا حتى قبل إرسالها إلى خطاف النوافذ المنخفضة المستوى.

سأكون ممتنا للغاية للحصول على المشورة حول كيفية إيقاف تشغيل هذه المعالجة المسبقة. لا أريد التبديل إلى Realtimestylus - أولا لأنه لن يعمل على WINDOWS XP بالإضافة إلى السبورة التفاعلية الذكية التفاعلية، الثانية لأنني لا أستطيع أن أرى كيفية استخدام RealTimestylus في Cpython، لذلك سأحتاج إلى التبديل إلى IronPython، ثم لن يتم تشغيل التعليمات البرمجية الخاصة بي على Linux / Mac.

دامون.

هل كانت مفيدة؟

المحلول

للحصول على رسائل الماوس الخام، يمكنك استخدامها WM_INPUT على XP وبعد ذلك. سبعة أضاف بعض الأشياء المحددة اللمسة: WM_GESTURE و WM_TOUCH

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