كيفية اكتشاف نقرات الفأرة في بايثون

hocine
Hocine Gasmi
Back-end Developer (Python/Django)
13/08/2022 |برمجة 💻
كيفية اكتشاف نقرات الفأرة في بايثون

كيفية تتبع نقرات و تحريك الفأرة باستخدام لغة البرمجة بايثون بمساعدة المكتبة pynput.

للوصول الى هدفنا و هو كيفية تتبع نقرات و تحريك الفأرة, اولا نقوم بتثبيت المكتبة pynput باستعمال الادات pip.

تثبيت المكتبة pynput

لتثبيت المكتبة نقوم بتنفيذ الامر التالي في منفذ الاوامر:

pip install pynput

 للتاكد من ان المكتبة نجح تثبيتها قم بالمر التالي:

$ pip install pynput
Collecting pynput
  Using cached pynput-1.7.6-py2.py3-none-any.whl (89 kB)
...
...
Successfully installed pynput-1.7.6

 

 

بناء البرنامج

اولا نقوم بانشاء ملف و حفظه بالاسم detect_mouse_click.py. ثم نقوم بكتابة السطر الاول و الذي يقوم بتضمين الـ Listener من المكتبة pynput.mouse:

from pynput.mouse import Listener

سنقوم بإعداد Listener عن طريق إنشاء instance في تعليمة with واستخدام أسلوب  .join () لضمه إلى برنامج الرئيسي.

with Listener() as listener:
    listener.join()

نقوم بانشاء ثلاث دوال والتي هي عند_التحرك و عند_النقر و عند_التمرير (on_move, on_click, on_scroll):

def on_move(x, y):
    print(f"Mouse moved to ({x}, {y})")

def on_click(x, y, button, pressed):
    if pressed:
        print(f'Mouse clicked at {x}, {y}) with {button}')

def on_scroll(x, y, dx, dy):
    print(f'Mouse scrolled at ({x}, {y})({dx}, {dy})')

 

اضافة الـ Listener

نقوم بربط هذه الدوال بالـ Listener بالدوال عن ذريق تمريرها كـ args ؛ الآن عند حدوث أمر ما، سيتم تشغيل إحدى هذه الدوال.

with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:

 

 

ملاحضة حول Listener

كملاحظة سريعة، فإن الـ Listener عبارة عن Thread مما يعني أنه بمجرد انضمامها إلى البرنامج الرئيسي، لن يتم تنفيذ أي رمز بعده حتى يتم إيقافه. برنامجنا حتى هذه اللحضة سيعمل و لكن لن تستطيع اقافه الى عنن طريق ايقاف منفذ الاوامر.

يمكننا استدعاء pynput.mouse.Listener.stop في أي مكان في البرنامج لإيقاف Thread .

يمكننا أيضًا استدعاء listener.stop () في أحد الدوال نظرًا لحقيقة أن Listener موجود الآن في النطاق (scope) وهو instance  للـ OS Listener.

 

البرنامج الكامل

from pynput.mouse import Listener

def on_move(x, y):
    print(f"Mouse moved to ({x}, {y})")

def on_click(x, y, button, pressed):
    if pressed:
        print(f'Mouse clicked at {x}, {y}) with {button}')

def on_scroll(x, y, dx, dy):
    print(f'Mouse scrolled at ({x}, {y})({dx}, {dy})')
    listener.stop()

with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
    listener.join()

 

في هذا لابرنامج قما بوضع listener.stop () في دالة التحريك, والتي تقوم بتوقيف الـ Thread. يمكنك تغيير هذا السلوك حسب احتياجك.

برنامج بايثون

 

 

الخاتمة

في هذا الموضوع قمنا بانشاء ثلاث دوال تقوم بطبع الامر الذي تقوم به الفأرة, و من ثم مررنا تلك الدوال الى الـ Listener. في النهاية قمنا بانهاءه بنداء listener.stop ().

نتمنى ان الموضوع كان مفيدا, تفقد مواضعنا الاخرى حول بايثون:

 

 

تذكر أن المساهمات في هذا الموضوع يجب أن تتبع إرشادات المجتمع.


التعليقات:

    لا توجد تعليقات بعد.