"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني محاكاة أحداث لوحة المفاتيح برمجياً في بايثون؟

كيف يمكنني محاكاة أحداث لوحة المفاتيح برمجياً في بايثون؟

تم النشر بتاريخ 2024-11-08
تصفح:457

How Can I Programmatically Simulate Keyboard Events in Python?

كيفية إنشاء أحداث لوحة المفاتيح باستخدام بايثون

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

محاكاة ضغطات المفاتيح

للحصول على نهج مباشر ومتعدد المنصات، خذ بعين الاعتبار باستخدام مكتبة

ctypes، والتي تسمح لك بالتفاعل مع Windows API:

  1. استيراد المكتبات الضرورية: استيراد ctypes، wintypes، والوقت.
  2. تحميل المستخدم32 DLL: قم بالوصول إلى Windows API User32 DLL وحدد الثوابت لأنواع الإدخال والأحداث الرئيسية.
  3. تحديد بنيات الإدخال: تعريف بنيات الماوس ولوحة المفاتيح ومدخلات الأجهزة.
  4. إنشاء كائن الإدخال: قم بإنشاء كائن INPUT لتمثيل الضغط على لوحة المفاتيح المطلوبة أو إطلاق.
  5. إرسال الإدخال:استخدم user32.SendInput لإرسال كائن الإدخال إلى الكمبيوتر، ومحاكاة الحدث الرئيسي.

مثال:

استيراد أنواع ctypes من ctypes استيراد wintypes وقت الاستيراد user32 = ctypes.WinDLL('user32', use_last_error=True) VK_A = 0x41 # رمز المفتاح الظاهري لـ "A" KEYEVENTF_KEYUP = 0x0002 # إشارة الحدث الرئيسي لإصدار المفتاح فئة KEYBDINPUT (ctypes.Structure): _fields_ = (("wVk"، wintypes.WORD)، ("wScan"، wintypes.WORD)، ("dwFlags"، wintypes.DWORD)، ("الوقت"، wintypes.DWORD)، ("dwExtraInfo"، wintypes.ULONG_PTR)) اضغط على مفتاح_المفتاح (key_code): key_input = KEYBDINPUT(wVk=key_code) user32.SendInput(1, ctypes.byref(key_input), ctypes.sizeof(key_input)) Def Release_key(key_code): key_input = KEYBDINPUT(wVk=key_code, dwFlags=KEYEVENTF_KEYUP) user32.SendInput(1, ctypes.byref(key_input), ctypes.sizeof(key_input)) # اضغط على المفتاح "A" وحرره اضغط على المفتاح (VK_A) وقت النوم(1) Release_key(VK_A)
import ctypes
from ctypes import wintypes
import time

user32 = ctypes.WinDLL('user32', use_last_error=True)

VK_A = 0x41  # Virtual key code for 'A'
KEYEVENTF_KEYUP = 0x0002  # Key event flag for key release

class KEYBDINPUT(ctypes.Structure):
    _fields_ = (("wVk", wintypes.WORD),
                ("wScan", wintypes.WORD),
                ("dwFlags", wintypes.DWORD),
                ("time", wintypes.DWORD),
                ("dwExtraInfo", wintypes.ULONG_PTR))

def press_key(key_code):
    key_input = KEYBDINPUT(wVk=key_code)
    user32.SendInput(1, ctypes.byref(key_input), ctypes.sizeof(key_input))

def release_key(key_code):
    key_input = KEYBDINPUT(wVk=key_code, dwFlags=KEYEVENTF_KEYUP)
    user32.SendInput(1, ctypes.byref(key_input), ctypes.sizeof(key_input))

# Press and release the 'A' key
press_key(VK_A)
time.sleep(1)
release_key(VK_A)
ملاحظات إضافية:

لمحاكاة مفاتيح مختلفة، راجع وثائق

رموز المفاتيح الافتراضية
    على MSDN.
  • تركز هذه التقنية على محاكاة الأحداث على مستوى النظام، حتى بالنسبة لعمليات الخلفية التي قد لا تقبل النافذة النشطة input.
  • استكشف المكتبات والمنصات البديلة للحصول على خيارات أخرى، وفقًا لمتطلباتك المحددة.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3