هذا المشروع غير قابل للصيانة حاليًا. إنه يعمل في العديد من الحالات، وأتمنى استخدامه مرة أخرى في المستقبل، لكن قد تواجه بعض الاحتكاك ومحدودية الميزات في استخدامه.
تحكم بشكل كامل في لوحة المفاتيح باستخدام مكتبة Python الصغيرة هذه. ربط الأحداث العالمية، وتسجيل مفاتيح التشغيل السريع، ومحاكاة الضغط على المفاتيح، وغير ذلك الكثير.
ctrl+shift+m, ctrl+space
) مع مهلة يمكن التحكم فيها.Ctrl+ç
).pip install mouse
). تثبيت حزمة PyPI:
pip install keyboard
أو استنساخ المستودع (لا يتطلب التثبيت، الملفات المصدر كافية):
git clone https://github.com/boppreh/keyboard
أو قم بتنزيل الملف المضغوط واستخراجه في مجلد المشروع الخاص بك.
ثم تحقق من مستندات API أدناه لمعرفة الميزات المتوفرة.
استخدامها كمكتبة:
import keyboard
keyboard . press_and_release ( 'shift+s, space' )
keyboard . write ( 'The quick brown fox jumps over the lazy dog.' )
keyboard . add_hotkey ( 'ctrl+shift+a' , print , args = ( 'triggered' , 'hotkey' ))
# Press PAGE UP then PAGE DOWN to type "foobar".
keyboard . add_hotkey ( 'page up, page down' , lambda : keyboard . write ( 'foobar' ))
# Blocks until you press esc.
keyboard . wait ( 'esc' )
# Record events until 'esc' is pressed.
recorded = keyboard . record ( until = 'esc' )
# Then replay back at three times the speed.
keyboard . play ( recorded , speed_factor = 3 )
# Type @@ then press space to replace with abbreviation.
keyboard . add_abbreviation ( '@@' , '[email protected]' )
# Block forever, like `while True`.
keyboard . wait ()
استخدم كوحدة مستقلة:
# Save JSON events to a file until interrupted:
python -m keyboard > events.txt
cat events.txt
# {"event_type": "down", "scan_code": 25, "name": "p", "time": 1622447562.2994788, "is_keypad": false}
# {"event_type": "up", "scan_code": 25, "name": "p", "time": 1622447562.431007, "is_keypad": false}
# ...
# Replay events
python -m keyboard < events.txt
event.device == None
). رقم 21/dev/input/input*
) ولكن هذا يتطلب الجذر.keyboard
من الإبلاغ عن الأحداث.keyboard
عبر SSH، فلن يكتشف الخادم الأحداث الرئيسية الخاصة بك. import keyboard
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed!' ))
# If the program finishes, the hotkey is not in effect anymore.
# Don't do this! This will use 100% of your CPU.
#while True: pass
# Use this instead
keyboard . wait ()
# or this
import time
while True :
time . sleep ( 1000000 )
import keyboard
# Don't do this! This will use 100% of your CPU until you press the key.
#
#while not keyboard.is_pressed('space'):
# continue
#print('space was pressed, continuing...')
# Do this instead
keyboard . wait ( 'space' )
print ( 'space was pressed, continuing...' )
import keyboard
# Don't do this!
#
#while True:
# if keyboard.is_pressed('space'):
# print('space was pressed!')
#
# This will use 100% of your CPU and print the message many times.
# Do this instead
while True :
keyboard . wait ( 'space' )
print ( 'space was pressed! Waiting on it again...' )
# or this
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed!' ))
keyboard . wait ()
import keyboard
# Don't do this! This will call `print('space')` immediately then fail when the key is actually pressed.
#keyboard.add_hotkey('space', print('space was pressed'))
# Do this instead
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed' ))
# or this
def on_space ():
print ( 'space was pressed' )
keyboard . add_hotkey ( 'space' , on_space )
# or this
while True :
# Wait for the next event.
event = keyboard . read_event ()
if event . event_type == keyboard . KEY_DOWN and event . name == 'space' :
print ( 'space was pressed' )
# Don't do this! The `keyboard` module is meant for global events, even when your program is not in focus.
#import keyboard
#print('Press any key to continue...')
#keyboard.get_event()
# Do this instead
input ( 'Press enter to continue...' )
# Or one of the suggestions from here
# https://stackoverflow.com/questions/983354/how-to-make-a-script-wait-for-a-pressed-key
press_and_release
)unblock_key
، unhook_key
، unremap_key
)register_hotkey
)clear_hotkey
، unregister_hotkey
، unremap_hotkey
)clear_all_hotkeys
و remove_all_hotkeys
و unregister_all_hotkeys
)replay
)register_word_listener
)remove_abbreviation
)register_abbreviation
) = 'down'
= 'up'
[مصدر]
= { 'alt' , 'alt gr' , 'ctrl' , 'left alt' , 'left ctrl' , 'left shift' , 'left windows' , 'right alt' , 'right ctrl' , 'right shift' , 'right windows' , 'shift' , 'windows' }
= { 'alt' , 'ctrl' , 'shift' , 'windows' }
= '0.13.5'
[مصدر]
يتم إرجاع True إذا كان key
عبارة عن رمز مسح ضوئي أو اسم مفتاح تعديل.
[مصدر]
إرجاع قائمة برموز المسح المرتبطة بهذا المفتاح (الاسم أو رمز المسح).
[مصدر]
يوزع مفتاح التشغيل السريع المقدم من المستخدم إلى مجموعات متداخلة تمثل البنية التي تم تحليلها، وتكون القيم السفلية عبارة عن قوائم رموز المسح. يقبل أيضًا رموز المسح الأولية، والتي يتم تغليفها بعد ذلك بالعدد المطلوب من التعشيش.
مثال:
parse_hotkey ( "alt+shift+a, alt+b, c" )
# Keys: ^~^ ^~~~^ ^ ^~^ ^ ^
# Steps: ^~~~~~~~~~^ ^~~~^ ^
# ((alt_codes, shift_codes, a_codes), (alt_codes, b_codes), (c_codes,))
[مصدر]
يرسل أحداث نظام التشغيل التي تنفذ مفتاح التشغيل السريع المحدد.
hotkey
إما رمز مسح ضوئي (على سبيل المثال 57 للمسافة)، أو مفتاح واحد (على سبيل المثال "مسافة") أو مفتاح تشغيل سريع متعدد المفاتيح ومتعدد الخطوات (على سبيل المثال "alt+F4، enter").do_press
إذا كان صحيحًا، فسيتم إرسال الأحداث الصحفية. الافتراضيات إلى صحيح.do_release
إذا كان صحيحًا، فسيتم إرسال أحداث الإصدار. الافتراضيات إلى صحيح. send ( 57 )
send ( 'ctrl+alt+del' )
send ( 'alt+F4, enter' )
send ( 'shift+s' )
ملحوظة: يتم تحرير المفاتيح بالترتيب المعاكس للضغط عليها.
[مصدر]
الضغط مع الاستمرار على مفتاح التشغيل السريع (انظر send
).
[مصدر]
يطلق مفتاح التشغيل السريع (انظر send
).
[مصدر]
إرجاع صحيح إذا تم الضغط على المفتاح.
is_pressed ( 57 ) #-> True
is_pressed ( 'space' ) #-> True
is_pressed ( 'ctrl+space' ) #-> True
[مصدر]
يستدعي الوظيفة المتوفرة في سلسلة رسائل جديدة بعد الانتظار لبعض الوقت. مفيد لإعطاء النظام بعض الوقت لمعالجة حدث ما، دون عرقلة تدفق التنفيذ الحالي.
[مصدر]
تثبيت مستمع عالمي على جميع لوحات المفاتيح المتاحة، واستدعاء callback
في كل مرة يتم فيها الضغط على المفتاح أو تحريره.
الحدث الذي تم تمريره إلى رد الاتصال هو من النوع keyboard.KeyboardEvent
، بالسمات التالية:
name
: تمثيل Unicode للحرف (على سبيل المثال "&") أو الوصف (على سبيل المثال "مسافة"). الاسم دائما صغير.scan_code
: الرقم الذي يمثل المفتاح الفعلي، على سبيل المثال 55.time
: الطابع الزمني للوقت الذي وقع فيه الحدث، بنفس الدقة التي يحددها نظام التشغيل.إرجاع رد الاتصال المحدد لتسهيل التطوير.
[مصدر]
يستدعي callback
لكل حدث KEY_DOWN. لمزيد من التفاصيل انظر hook
.
[مصدر]
يستدعي callback
لكل حدث KEY_UP. لمزيد من التفاصيل انظر hook
.
[مصدر]
أحداث ربط المفاتيح لأعلى ولأسفل لمفتاح واحد. إرجاع معالج الحدث الذي تم إنشاؤه. لإزالة مفتاح معلق، استخدم unhook_key(key)
أو unhook_key(handler)
.
ملاحظة: تتشارك هذه الوظيفة الحالة مع مفاتيح التشغيل السريع، لذا clear_all_hotkeys
يؤثر عليها أيضًا.
[مصدر]
يستدعي callback
لحدث KEY_DOWN المتعلق بالمفتاح المحدد. لمزيد من التفاصيل انظر hook
.
[مصدر]
يستدعي callback
لحدث KEY_UP المتعلق بالمفتاح المحدد. لمزيد من التفاصيل انظر hook
.
[مصدر]
يزيل الخطاف المُضاف مسبقًا، إما عن طريق رد الاتصال أو عن طريق القيمة المرجعة hook
.
[مصدر]
يزيل جميع أدوات ربط لوحة المفاتيح المستخدمة، بما في ذلك مفاتيح التشغيل السريع والاختصارات ومستمعي الكلمات record
wait
.
[مصدر]
يمنع كافة الأحداث الرئيسية للمفتاح المحدد، بغض النظر عن المعدلات.
[مصدر]
عندما يتم الضغط على المفتاح src
أو تحريره، بغض النظر عن المعدلات، اضغط أو حرّر مفتاح التشغيل السريع dst
بدلاً من ذلك.
[مصدر]
يوزع مفتاح التشغيل السريع المقدم من المستخدم. بشكل مختلف عن parse_hotkey
، فبدلاً من أن تكون كل خطوة قائمة برموز المسح المختلفة لكل مفتاح، تكون كل خطوة عبارة عن قائمة بجميع المجموعات الممكنة لرموز المسح هذه.
[مصدر]
يستدعي رد اتصال في كل مرة يتم فيها الضغط على مفتاح التشغيل السريع. يجب أن يكون مفتاح التشغيل السريع بالتنسيق ctrl+shift+a, s
. قد يحدث هذا عندما يضغط المستخدم على ctrl وshift و"a" مرة واحدة، ثم يحرر، ثم يضغط على "s". لتمثيل الفواصل والإيجابات والمسافات بشكل حرفي، استخدم أسمائها ("فاصلة"، "زائد"، "مسافة").
args
هي قائمة اختيارية من الوسائط التي سيتم تمريرها إلى رد الاتصال أثناء كل استدعاء.suppress
ما إذا كانت المشغلات الناجحة يجب أن تمنع إرسال المفاتيح إلى برامج أخرى.timeout
هي مقدار الثواني المسموح لها بالمرور بين الضغطات على المفاتيح.trigger_on_release
إذا كان صحيحا، فسيتم استدعاء رد الاتصال عند تحرير المفتاح بدلا من الضغط على المفتاح. تم إرجاع وظيفة معالج الأحداث. لإزالة مفتاح التشغيل السريع، قم باستدعاء remove_hotkey(hotkey)
أو remove_hotkey(handler)
. قبل إعادة تعيين حالة مفتاح التشغيل السريع.
ملاحظة: يتم تنشيط مفاتيح التشغيل السريع عند الضغط على المفتاح الأخير، ولا يتم تحريره. ملاحظة: يتم تنفيذ رد الاتصال في سلسلة منفصلة بشكل غير متزامن. للحصول على مثال حول كيفية استخدام رد الاتصال بشكل متزامن، راجع wait
.
أمثلة:
# Different but equivalent ways to listen for a spacebar key press.
add_hotkey ( ' ' , print , args = [ 'space was pressed' ])
add_hotkey ( 'space' , print , args = [ 'space was pressed' ])
add_hotkey ( 'Space' , print , args = [ 'space was pressed' ])
# Here 57 represents the keyboard code for spacebar; so you will be
# pressing 'spacebar', not '57' to activate the print function.
add_hotkey ( 57 , print , args = [ 'space was pressed' ])
add_hotkey ( 'ctrl+q' , quit )
add_hotkey ( 'ctrl+alt+enter, space' , some_callback )
[مصدر]
يزيل مفتاح التشغيل السريع الذي تم ربطه مسبقًا. يجب أن يتم استدعاؤه بالقيمة التي يتم إرجاعها بواسطة add_hotkey
.
[مصدر]
يزيل جميع مفاتيح التشغيل السريع المستخدمة في لوحة المفاتيح، بما في ذلك الاختصارات ومستمعي الكلمات record
وعناصر wait
.
[مصدر]
عندما يتم الضغط على مفتاح التشغيل السريع src
، قم بإيقافه وأرسل dst
بدلاً من ذلك.
مثال:
remap ( 'alt+w' , 'ctrl+up' )
[مصدر]
ينشئ قائمة بجميع رموز المسح المضغوطة حاليًا، ويحررها ويعيد القائمة. يقترن جيدًا مع restore_state
و restore_modifiers
.
[مصدر]
تضمن قائمة رموز المسح الضوئي الضغط على هذه المفاتيح، وهذه المفاتيح فقط. يقترن بشكل جيد مع stash_state
، بديل ل restore_modifiers
.
[مصدر]
مثل restore_state
، ولكنه يستعيد مفاتيح التعديل فقط.
[مصدر]
يرسل أحداث لوحة المفاتيح الاصطناعية إلى نظام التشغيل، لمحاكاة كتابة نص معين. تتم كتابة الأحرف غير المتوفرة على لوحة المفاتيح كأحرف Unicode صريحة باستخدام وظائف خاصة بنظام التشغيل، مثل alt+codepoint.
لضمان سلامة النص، يتم تحرير كافة المفاتيح المضغوطة حاليًا قبل كتابة النص، ويتم استعادة المعدلات بعد ذلك.
delay
هو عدد الثواني التي يجب الانتظار بين الضغطات على المفاتيح، والإعداد الافتراضي هو عدم وجود تأخير.restore_state_after
لاستعادة حالة المفاتيح المضغوطة بعد كتابة النص، أي الضغط على المفاتيح التي تم تحريرها في البداية. الافتراضيات إلى صحيح.exact
التي تكتب جميع الأحرف كرمز موحد صريح (على سبيل المثال، alt+codepoint أو الأحداث الخاصة). إذا لم يكن هناك شيء، يستخدم القيمة المقترحة الخاصة بالنظام الأساسي. [مصدر]
يمنع تنفيذ البرنامج حتى يتم الضغط على مفتاح التشغيل السريع المحدد، أو إذا لم يتم تحديد أي معلمات، يتم حظره إلى الأبد.
[مصدر]
يُرجع تمثيل سلسلة لمفتاح التشغيل السريع من أسماء المفاتيح المحددة، أو المفاتيح المضغوطة حاليًا إذا لم يتم تقديمها. هذه الوظيفة:
مثال:
get_hotkey_name ([ '+' , 'left ctrl' , 'shift' ])
# "ctrl+shift+plus"
[مصدر]
يتم الحظر حتى حدوث حدث لوحة المفاتيح، ثم يتم إرجاع هذا الحدث.
[مصدر]
يتم الحظر حتى وقوع حدث لوحة المفاتيح، ثم يتم إرجاع اسم هذا الحدث أو رمز المسح الضوئي الخاص به، إذا كان مفقودًا.
[مصدر]
يشبه read_key()
، ولكنه يُحظر حتى يضغط المستخدم على مفتاح التشغيل السريع (أو مفتاح واحد) ويحرره، ثم يُرجع سلسلة تمثل مفتاح التشغيل السريع الذي تم الضغط عليه.
مثال:
read_hotkey ()
# "ctrl+shift+p"
[مصدر]
نظرا لتسلسل الأحداث، يحاول استنتاج السلاسل التي تم كتابتها. يتم فصل السلاسل عند الضغط على مفتاح غير نصي (مثل مفتاح tab أو enter). يتم تحويل الأحرف إلى أحرف كبيرة وفقًا لحالة Shift وcapslock. إذا كانت allow_backspace
صحيحة، فستزيل المسافات للخلف آخر حرف تم كتابته.
هذه الوظيفة عبارة عن مولد، لذا يمكنك تمرير دفق لا نهائي من الأحداث وتحويلها إلى سلاسل في الوقت الفعلي.
لاحظ أن هذه الوظائف هي مجرد إرشادي. على سبيل المثال، يحتفظ Windows بحالة لوحة المفاتيح لكل عملية، مثل تخطيط لوحة المفاتيح، وهذه المعلومات غير متاحة لخطافاتنا.
get_type_strings ( record ()) #-> ['This is what', 'I recorded', '']
[مصدر]
يبدأ تسجيل كافة أحداث لوحة المفاتيح في متغير عام، أو قائمة الانتظار المحددة إن وجدت. إرجاع قائمة انتظار الأحداث والدالة المعلقة.
استخدم stop_recording()
أو unhook(hooked_function)
للإيقاف.
[مصدر]
إيقاف التسجيل العالمي للأحداث وإرجاع قائمة بالأحداث التي تم التقاطها.
[مصدر]
يسجل جميع أحداث لوحة المفاتيح من جميع لوحات المفاتيح حتى يضغط المستخدم على مفتاح التشغيل السريع المحدد. ثم يقوم بإرجاع قائمة الأحداث المسجلة، من النوع keyboard.KeyboardEvent
. يتناسب جيدًا مع play(events)
.
ملاحظة: هذه وظيفة حظر. ملحوظة: لمزيد من التفاصيل حول ربط لوحة المفاتيح والأحداث، راجع hook
.
[مصدر]
تشغيل سلسلة من الأحداث المسجلة، مع الحفاظ على الفواصل الزمنية النسبية. إذا كانت قيمة speed_factor <= 0، فسيتم إعادة تشغيل الإجراءات بالسرعة التي يسمح بها نظام التشغيل. يقترن بشكل جيد مع record()
.
ملاحظة: يتم مسح حالة لوحة المفاتيح الحالية في البداية واستعادتها في نهاية الوظيفة.
[مصدر]
يستدعي رد اتصال في كل مرة تتم فيها كتابة سلسلة من الأحرف (على سبيل المثال، 'pet') ويتبعها مفتاح تشغيل (على سبيل المثال، مسافة). يتم تجاهل المعدلات (مثل alt وctrl وshift).
word
النص المكتوب المراد مطابقته. على سبيل المثال "الحيوانات الأليفة".callback
هو وظيفة بدون وسيطات يتم استدعاؤها في كل مرة يتم فيها كتابة الكلمة.triggers
هي قائمة المفاتيح التي ستؤدي إلى التحقق من المطابقة. إذا ضغط المستخدم على مفتاح ليس حرفًا (len>1) وليس في المشغلات، فسيتم تجاهل الأحرف حتى الآن. بشكل افتراضي، يكون المشغل عبارة عن space
فقط.match_suffix
ما إذا كان يجب أيضًا التحقق من نهايات الكلمات بدلاً من الكلمات الكاملة فقط. على سبيل المثال، إذا كان هذا صحيحًا، فإن كتابة "سجادة" + مسافة ستؤدي إلى تشغيل المستمع لكلمة "حيوان أليف". الإعدادات الافتراضية هي خطأ، ويتم فحص الكلمات بأكملها فقط.timeout
هي الحد الأقصى لعدد الثواني بين الأحرف المكتوبة قبل أن يتم تجاهل الكلمة الحالية. الافتراضي هو 2 ثانية. إرجاع معالج الحدث الذي تم إنشاؤه. لإزالة مستمع للكلمات، استخدم remove_word_listener(word)
أو remove_word_listener(handler)
.
ملاحظة: يتم تنفيذ كافة الإجراءات على المفتاح لأسفل. يتم تجاهل الأحداث الرئيسية. ملحوظة: مطابقات الكلمات حساسة لحالة الأحرف .
[مصدر]
يزيل مستمع الكلمات المسجل مسبقًا. يقبل إما الكلمة المستخدمة أثناء التسجيل (السلسلة الدقيقة) أو معالج الحدث الذي يتم إرجاعه بواسطة وظائف add_word_listener
أو add_abbreviation
.
[مصدر]
يقوم بتسجيل مفتاح التشغيل السريع الذي يستبدل النص المكتوب بآخر. على سبيل المثال
add_abbreviation ( 'tm' , u'™' )
يستبدل كل "tm" متبوعة بمسافة برمز ™ (بدون مسافة). يتم الاستبدال عن طريق إرسال أحداث مسافة للخلف.
match_suffix
ما إذا كان يجب أيضًا التحقق من نهايات الكلمات بدلاً من الكلمات الكاملة فقط. على سبيل المثال، إذا كان هذا صحيحًا، فإن كتابة "سجادة" + مسافة ستؤدي إلى تشغيل المستمع لكلمة "حيوان أليف". الإعدادات الافتراضية هي خطأ، ويتم فحص الكلمات بأكملها فقط.timeout
هي الحد الأقصى لعدد الثواني بين الأحرف المكتوبة قبل أن يتم تجاهل الكلمة الحالية. الافتراضي هو 2 ثانية. لمزيد من التفاصيل راجع add_word_listener
.
[مصدر]
بالنظر إلى اسم المفتاح (مثل "LEFT CONTROL")، قم بتنظيف السلسلة وتحويلها إلى التمثيل الأساسي (مثل "left ctrl") إذا كان معروفًا.