غلاف بيثون مكتوب بالكامل حول AutoHotkey.
pip install ahk
يتطلب بيثون 3.8+
يدعم AutoHotkey V1 و V2. انظر أيضًا: تبعيات غير بايثون
from ahk import AHK
ahk = AHK ()
ahk . mouse_move ( x = 100 , y = 100 , blocking = True ) # Blocks until mouse finishes moving (the default)
ahk . mouse_move ( x = 150 , y = 150 , speed = 10 , blocking = True ) # Moves the mouse to x, y taking 'speed' seconds to move
print ( ahk . mouse_position ) # (150, 150)أمثلة غير شاملة لبعض الوظائف المتاحة مع هذه الحزمة. راجع الوثائق الكاملة لمراجع API الكاملة والميزات الإضافية.
يمكن تكوين مفاتيح Hotkeys لتشغيل وظائف Python كعمليات عروض.
على سبيل المثال:
from ahk import AHK
def my_callback ():
print ( 'Hello callback!' )
ahk = AHK ()
# when WIN + n is pressed, fire `my_callback`
ahk . add_hotkey ( '#n' , callback = my_callback )
ahk . start_hotkeys () # start the hotkey process thread
ahk . block_forever () # not strictly needed in all scripts -- stops the script from exiting; sleep forever الآن كلما ضغطت + n ، سيتم استدعاء وظيفة رد الاتصال my_callback في موضوع خلفية.
يمكنك أيضًا إضافة معالج استثناء لصالحك:
from ahk import AHK
ahk = AHK ()
def go_boom ():
raise Exception ( 'boom!' )
def my_ex_handler ( hotkey : str , exception : Exception ):
print ( 'exception with callback for hotkey' , hotkey , 'Here was the error:' , exception )
ahk . add_hotkey ( '#n' , callback = go_boom , ex_handler = my_ex_handler )هناك أيضًا طرق لإزالة المفاتيح الساخنة:
# ...
ahk . remove_hotkey ( '#n' ) # remove a hotkey by its keyname
ahk . clear_hotkeys () # remove all hotkeysلاحظ أن:
ahk.start_hotkeys() )ahk.stop_hotkeys() (لن يتوقف عن تشغيل عمليات الاسترجاعات بنشاط)انظر أيضًا وثائق AHK ذات الصلة
يمكن أيضًا إضافة HotStrings إلى موضوع عملية Hotkey.
بالإضافة إلى HotStrings التي تدعم بدائل سلسلة AHK العادية ، يمكنك أيضًا تقديم عوائد Python (مع معالجات الاستثناء الاختيارية) استجابةً لاتخاذ Hotstrings.
from ahk import AHK
ahk = AHK ()
def my_callback ():
print ( 'hello callback!' )
ahk . add_hotstring ( 'btw' , 'by the way' ) # string replacements
ahk . add_hotstring ( 'btw' , my_callback ) # call python function in response to the hotstringيمكنك أيضًا إزالة hotstrings:
ahk . remove_hotstring ( 'btw' ) # remove a hotstring by its trigger sequence
ahk . clear_hotstrings () # remove all registered hotstrings from ahk import AHK
ahk = AHK ()
ahk . mouse_position # Returns a tuple of mouse coordinates (x, y) (relative to active window)
ahk . get_mouse_position ( coord_mode = 'Screen' ) # get coordinates relative to the screen
ahk . mouse_move ( 100 , 100 , speed = 10 , relative = True ) # Moves the mouse reletave to the current position
ahk . mouse_position = ( 100 , 100 ) # Moves the mouse instantly to absolute screen position
ahk . click () # Click the primary mouse button
ahk . click ( 200 , 200 ) # Moves the mouse to a particular position and clicks (relative to active window)
ahk . click ( 100 , 200 , coord_mode = 'Screen' ) # click relative to the screen instead of active window
ahk . click ( button = 'R' , click_count = 2 ) # Clicks the right mouse button twice
ahk . right_click () # Clicks the secondary mouse button
ahk . mouse_drag ( 100 , 100 , relative = True ) # Holds down primary button and moves the mouse from ahk import AHK
ahk = AHK ()
ahk . type ( 'hello, world!' ) # Send keys, as if typed (performs string escapes for you)
ahk . send_input ( 'Hello, {U+1F30E}{!}' ) # Like AHK SendInput
# Unlike `type`, control sequences must be escaped manually.
# For example the characters `!^+#=` and braces (`{` `}`) must be escaped manually.
ahk . key_state ( 'Control' ) # Return True or False based on whether Control key is pressed down
ahk . key_state ( 'CapsLock' , mode = 'T' ) # Check toggle state of a key (like for NumLock, CapsLock, etc)
ahk . key_press ( 'a' ) # Press and release a key
ahk . key_down ( 'Control' ) # Press down (but do not release) Control key
ahk . key_up ( 'Control' ) # Release the key
ahk . set_capslock_state ( "On" ) # Turn CapsLock on
if ahk . key_wait ( 'x' , timeout = 3 ): # wait for a key to be pressed; returns a boolean
print ( 'X was pressed within 3 seconds' )
else :
print ( 'X was not pressed within 3 seconds' )يمكنك القيام بأشياء مع Windows أيضًا.
from ahk import AHK
ahk = AHK ()
win = ahk . active_window # Get the active window
win = ahk . win_get ( title = 'Untitled - Notepad' ) # by title
all_windows = ahk . list_windows () # list of all windows
win = ahk . win_get_from_mouse_position () # the window under the mouse cursor
win = ahk . win_get ( title = 'ahk_pid 20366' ) # get window from pid
# Wait for a window
try :
# wait up to 5 seconds for notepad
win = ahk . win_wait ( title = 'Untitled - Notepad' , timeout = 5 )
# see also: win_wait_active, win_wait_not_active
except TimeoutError :
print ( 'Notepad was not found!' ) from ahk import AHK
ahk = AHK ()
ahk . run_script ( 'Run Notepad' ) # Open notepad
win = ahk . find_window ( title = 'Untitled - Notepad' ) # Find the opened window; returns a `Window` object
# Window object methods
win . send ( 'hello' , control = 'Edit1' ) # Send keys directly to the window (does not need focus!)
# OR ahk.control_send(title='Untitled - Notepad', control='Edit1')
win . move ( x = 200 , y = 300 , width = 500 , height = 800 )
win . activate () # Give the window focus
win . close () # Close the window
win . hide () # Hide the window
win . kill () # Kill the window
win . maximize () # Maximize the window
win . minimize () # Minimize the window
win . restore () # Restore the window
win . show () # Show the window
win . disable () # Make the window non-interactable
win . enable () # Enable it again
win . to_top () # Move the window on top of other windows
win . to_bottom () # Move the window to the bottom of the other windows
win . get_class () # Get the class name of the window
win . get_minmax () # Get the min/max status
win . get_process_name () # Get the process name (e.g., "notepad.exe")
win . process_name # Property; same as `.get_process_name()` above
win . is_always_on_top () # Whether the window has the 'always on top' style applied
win . list_controls () # Get a list of controls (list of `Control` objects)
win . redraw () # Redraw the window
win . set_style ( "-0xC00000" ) # Set a style on the window (in this case, removing the title bar)
win . set_ex_style ( "^0x80" ) # Set an ExStyle on the window (in this case, removes the window from alt-tab list)
win . set_region ( "" ) # See: https://www.autohotkey.com/docs/v2/lib/WinSetRegion.htm
win . set_trans_color ( "White" ) # Makes all pixels of the chosen color invisible inside the specified window.
win . set_transparent ( 155 ) # Makes the specified window semi-transparent (or "Off" to turn off transparency)
win . always_on_top = 'On' # Make the window always on top
# or
win . set_always_on_top ( 'On' )
for window in ahk . list_windows (): # list all (non-hidden) windows -- ``detect_hidden_windows=True`` to include hidden
print ( window . title )
# Some more attributes
print ( window . text ) # window text -- or .get_text()
print ( window . get_position ()) # (x, y, width, height)
print ( window . id ) # the ahk_id of the window
print ( window . pid ) # process ID -- or .get_pid()
print ( window . process_path ) # or .get_process_path()
if win . active : # or win.is_active()
...
if win . exist : # or win.exists()
...
# Controls
edit_control = win . list_controls ()[ 0 ] # get the first control for the window, in this case "Edit1" for Notepad
edit_control . get_text () # get the text in Notepad
edit_control . get_position () # returns a `Postion` namedtuple: e.g. Position(x=6, y=49, width=2381, height=1013) يمكن أيضًا استدعاء طرق النوافذ المختلفة مباشرة دون إنشاء كائن Window أولاً باستخدام أساليب win_* الأساسية على فئة AHK . على سبيل المثال ، بدلاً من win.close() على النحو الوارد أعلاه ، يمكن للمرء أن يتصل بـ ahk.win_close(title='Untitled - Notepad') بدلاً من ذلك.
from ahk import AHK
ahk = AHK ()
ahk . image_search ( 'C: \ path \ to \ image.jpg' ) # Find an image on screen
# Find an image within a boundary on screen
ahk . image_search ( 'C: \ path \ to \ image.jpg' , upper_bound = ( 100 , 100 ), # upper-left corner of search area
lower_bound = ( 400 , 400 )) # lower-right corner of search area
ahk . pixel_get_color ( 100 , 100 ) # Get color of pixel located at coords (100, 100)
ahk . pixel_search ( color = '0x9d6346' , search_region_start = ( 0 , 0 ), search_region_end = ( 500 , 500 )) # Get coords of the first pixel with specified color الحصول على/تعيين بيانات Clipboard
from ahk import AHK
ahk = AHK ()
ahk . set_clipboard ( 'hello N{EARTH GLOBE AMERICAS} ' ) # set clipboard text contents
ahk . get_clipboard () # get clipboard text contents
# 'hello ?'
ahk . set_clipboard ( "" ) # Clear the clipboard
ahk . clip_wait ( timeout = 3 ) # Wait for clipboard contents to change (with text or file(s))
ahk . clip_wait ( timeout = 3 , wait_for_any_data = True ) # wait for _any_ clipboard contents يمكنك أيضًا الحصول على/تعيين ClipboardAll - ومع ذلك ، يجب ألا تحاول أبدًا الاتصال set_clipboard_all مع أي بيانات أخرى غيرها تمامًا كما تم إرجاعها بواسطة get_clipboard_all أو قد تحدث مشاكل غير متوقعة.
from ahk import AHK
ahk = AHK ()
# save all clipboard contents in all formats
saved_clipboard = ahk . get_clipboard_all ()
ahk . set_clipboard ( 'something else' )
...
ahk . set_clipboard_all ( saved_clipboard ) # restore saved content from earlier يمكنك أيضًا تعيين رد اتصال لتنفيذه عندما تتغير محتويات الحافظة. كما هو الحال مع أساليب Hotkey المذكورة أعلاه ، يمكنك أيضًا تعيين معالج استثناء. مثل مفاتيح hotkeys ، تتطلب عمليات اتصال on_clipboard_change أيضًا .start_hotkeys() أن يتم استدعاؤها لتسريعها.
يجب أن تقبل وظيفة رد الاتصال وسيطة موضعية واحدة ، وهي عدد صحيح يشير إلى نوع بيانات الحافظة.
from ahk import AHK
ahk = AHK ()
def my_clipboard_callback ( change_type : int ):
if change_type == 0 :
print ( 'Clipboard is now empty' )
elif change_type == 1 :
print ( 'Clipboard has text contents' )
elif change_type == 2 :
print ( 'Clipboard has non-text contents' )
ahk . on_clipboard_change ( my_clipboard_callback )
ahk . start_hotkeys () # like with hotkeys, must be called at least once for listening to start
# ...
ahk . set_clipboard ( "hello" ) # will cause the message "Clipboard has text contents" to be printed by the callback
ahk . set_clipboard ( "" ) # Clears the clipboard, causing the message "Clipboard is now empty" to be printed by the callback from ahk import AHK
ahk = AHK ()
ahk . sound_play ( 'C: \ path \ to \ sound.wav' ) # Play an audio file
ahk . sound_beep ( frequency = 440 , duration = 1000 ) # Play a beep for 1 second (duration in microseconds)
ahk . get_volume ( device_number = 1 ) # Get volume of a device
ahk . set_volume ( 50 , device_number = 1 ) # Set volume of a device
ahk . sound_get ( device_number = 1 , component_type = 'MASTER' , control_type = 'VOLUME' ) # Get sound device property
ahk . sound_set ( 50 , device_number = 1 , component_type = 'MASTER' , control_type = 'VOLUME' ) # Set sound device property تلميحات الأدوات/traytips
import time
from ahk import AHK
ahk = AHK ()
ahk . show_tooltip ( "hello4" , x = 10 , y = 10 )
time . sleep ( 2 )
ahk . hide_tooltip () # hide the tooltip
ahk . show_info_traytip ( "Info" , "It's also info" , silent = False , blocking = True ) # Default info traytip
ahk . show_warning_traytip ( "Warning" , "It's a warning" ) # Warning traytip
ahk . show_error_traytip ( "Error" , "It's an error" ) # Error trytipمربعات الحوار
from ahk import AHK , MsgBoxButtons
ahk = AHK ()
ahk . msg_box ( text = 'Do you like message boxes?' , title = 'My Title' , buttons = MsgBoxButtons . YES_NO )
ahk . input_box ( prompt = 'Password' , title = 'Enter your password' , hide = True )
ahk . file_select_box ( title = 'Select one or more mp3 files' , multi = True , filter = '*.mp3' , file_must_exist = True )
ahk . folder_select_box ( prompt = 'Select a folder' ) يمكنك تغيير مختلف الحالات العالمية مثل CoordMode DetectHiddenWindows وما إلى ذلك
from ahk import AHK
ahk = AHK ()
ahk . set_coord_mode ( 'Mouse' , 'Screen' ) # set default Mouse CoordMode to be relative to Screen
ahk . set_detect_hidden_windows ( True ) # Turn on detect hidden windows by default
ahk . set_send_level ( 5 ) # Change send https://www.autohotkey.com/docs/v1/lib/SendLevel.htm
ahk . set_title_match_mode ( 'Slow' ) # change title match speed and/or mode
ahk . set_title_match_mode ( 'RegEx' )
ahk . set_title_match_mode (( 'RegEx' , 'Slow' )) # or both at the same time
ahk . set_send_mode ( 'Event' ) # change the default SendMode يمكنك إضافة توجيهات سيتم إضافتها إلى جميع البرامج النصية التي تم إنشاؤها. على سبيل المثال ، لمنع ظهور Trayicon AHK ، يمكنك إضافة توجيه Notrayicon.
from ahk import AHK
from ahk . directives import NoTrayIcon
ahk = AHK ( directives = [ NoTrayIcon ])بشكل افتراضي ، تتم إضافة بعض التوجيهات تلقائيًا لضمان الوظيفة ويتم دمجها مع أي توجيهات مقدمة من المستخدم.
لا يتم تطبيق التوجيهات لعملية AHK المستخدمة للتعامل مع مفاتيح HotStrings (تمت مناقشتها أدناه) بشكل افتراضي. لتطبيق توجيه على عملية مفاتيح hotkeys باستخدام وسيطة الكلمة الرئيسية apply_to_hotkeys_process=True :
from ahk import AHK
from ahk . directives import NoTrayIcon
directives = [
NoTrayIcon ( apply_to_hotkeys_process = True )
]
ahk = AHK ( directives = directives )كما نوقش أعلاه ، يمكنك إخفاء أيقونة الدرج إذا كنت ترغب في ذلك. بالإضافة إلى ذلك ، هناك بعض الطرق المتاحة لتخصيص أيقونة الدرج.
from ahk import AHK
ahk = AHK ()
# change the tray icon (in this case, using a builtin system icon)
ahk . menu_tray_icon ( 'Shell32.dll' , 174 )
# revert it back to the original:
ahk . menu_tray_icon ()
# change the tooltip that shows up when hovering the mouse over the tray icon
ahk . menu_tray_tooltip ( 'My Program Name' )
# Hide the tray icon
ahk . menu_tray_icon_hide ()
# Show the tray icon that was previously hidden by ``NoTrayIcon`` or ``menu_tray_icon_hide``
ahk . menu_tray_icon_show ()يمكنك قراءة/كتابة/حذف مفاتيح التسجيل:
from ahk import AHK
ahk = AHK ()
ahk . reg_write ( 'REG_SZ' , r'HKEY_CURRENT_USERSOFTWAREmy-software' , value = 'test' )
ahk . reg_write ( 'REG_SZ' , r'HKEY_CURRENT_USERSOFTWAREmy-software' , value_name = 'foo' , value = 'bar' )
ahk . reg_read ( r'HKEY_CURRENT_USERSOFTWAREmy-software' ) # 'test'
ahk . reg_delete ( r'HKEY_CURRENT_USERSOFTWAREmy-software' )في حالة عدم وجود مفتاح أو حدوث مشكلة أخرى ، يتم إثارة استثناء.
توفر معظم الطرق في هذه المكتبة واجهة غير حظر ، بحيث يمكن أن تستمر البرامج النصية Python الخاصة بك في التنفيذ أثناء تشغيل البرامج النصية لـ AHK.
بشكل افتراضي ، يتم حظر جميع المكالمات - سيتم تنفيذ كل وظيفة تمامًا قبل تشغيل الوظيفة التالية.
ومع ذلك ، قد ترغب في بعض الأحيان في تشغيل رمز آخر بينما يقوم AHK بتنفيذ بعض التعليمات البرمجية. عندما يتم توفير وسيطة الكلمة الرئيسية blocking باستخدام False ، ستعود مكالمات الوظائف على الفور أثناء تنفيذ وظيفة AHK في الخلفية.
على سبيل المثال ، يمكنك تحريك الماوس ببطء والإبلاغ عن موقعه أثناء تحركه:
import time
from ahk import AHK
ahk = AHK ()
ahk . mouse_position = ( 200 , 200 ) # Moves the mouse instantly to the start position
start = time . time ()
# move the mouse very slowly
ahk . mouse_move ( x = 100 , y = 100 , speed = 30 , blocking = False )
# This code begins executing right away, even though the mouse is still moving
while True :
t = round ( time . time () - start , 4 )
position = ahk . mouse_position
print ( t , position ) # report mouse position while it moves
if position == ( 100 , 100 ):
break عندما تحدد blocking=False ، ستتلقى دائمًا كائنًا خاصًا FutureResult (أو كائن AsyncFutureResult في واجهة برمجة تطبيقات Async ، التي تمت مناقشتها أدناه) والتي تتيح لك الانتظار على الوظيفة لإكمال واسترداد قيمة الإرجاع من خلال وظيفة get_result . حتى عندما تُرجع الوظيفة عادةً None ، فقد يكون ذلك مفيدًا لضمان انتهاء AHK من تنفيذ الوظيفة.
المكالمات غير المحظورة:
set_coord_mode أو ما شابه ذلك) - قد يتغير هذا في إصدار مستقبلي.FutureResult الخاص (أو كائن AsyncFutureResult في واجهة برمجة تطبيقات Async ، التي تمت مناقشتها أدناه) والتي تتيح لك الانتظار في الوظيفة لإكمال واسترداد قيمة الإرجاع من خلال وظيفة result . حتى عندما تُرجع الوظيفة عادةً None ، فقد يكون ذلك مفيدًا لضمان انتهاء AHK من تنفيذ الوظيفة. from ahk import AHK
ahk = AHK ()
future_result = ahk . mouse_move ( 100 , 100 , speed = 40 , blocking = False )
...
# wait on the mouse_move to finish
future_result . result ( timeout = 10 ) # timeout keyword is optional يتم توفير واجهة برمجة تطبيقات ASYNC بحيث يمكن استدعاء الوظائف باستخدام async / await . جميع الطرق نفسها من واجهة برمجة التطبيقات المتزامنة متوفرة في واجهة برمجة تطبيقات ASYNC.
from ahk import AsyncAHK
import asyncio
ahk = AsyncAHK ()
async def main ():
await ahk . mouse_move ( 100 , 100 )
x , y = await ahk . get_mouse_position ()
print ( x , y )
asyncio . run ( main ())واجهة برمجة تطبيقات ASYNC متطابقة مع واجهة برمجة التطبيقات الطبيعية ، مع بعض الاختلافات البارزة:
await الخصائص (مثل .mouse_position أو .title for windows) ، تمت إضافة طرق إضافية (مثل get_mouse_position() و get_title() ) لاتفاقية واجهة برمجة تطبيقات أكثر سهولة ويوصى بها على استخدام الخصائص.ahk.mouse_postion = (200, 200) ) في واجهة برمجة تطبيقات Async (يتم رفع وقت التشغيل). يظل مستقلبات الممتلكات متاحين في API Sync.AsyncFutureResult (التي يتم إرجاعها عند تحديد blocking=False ) على نفس الشيء مثل كائنات FutureResult في واجهة برمجة تطبيقات SYNC ، باستثناء الكلمة الرئيسية timeout غير مدعومة لطريقة result ).لاحظ أيضًا أن:
AsyncAHK بشكل متزامن. يجب عليك إما استخدام blocking=False ، كما هو الحال في واجهة برمجة تطبيقات Sync ، أو استخدام مثيلات متعددة من AsyncAHK . يتم تلميح هذه المكتبة بالكامل ، مما يتيح لك الاستفادة من الأدوات مثل mypy للمساعدة في التحقق من صحة نوع التصحيح من الكود الخاص بك. إن المعرفات التي تنفذ ميزات فحص النوع قادرة أيضًا على الاستفادة من تلميحات النوع للمساعدة في ضمان أن رمزك آمن.
يمكنك أيضًا تشغيل رمز AutoHotkey التعسفي إما كملف البرنامج .ahk أو كسلسلة تحتوي على رمز AHK.
from ahk import AHK
ahk = AHK ()
my_script = '''
MouseMove, 100, 100
; etc...
'''
ahk . run_script ( my_script ) from ahk import AHK
ahk = AHK ()
script_path = r'C:PathTomyscript.ahk'
ahk . run_script ( script_path ) لاستخدام هذه الحزمة ، تحتاج إلى AutoHotkey قابل للتنفيذ (على سبيل المثال ، AutoHotkey.exe ). من المتوقع أن يكون على المسار افتراضيًا أو في موقع التثبيت الافتراضي ( C:Program FilesAutoHotkeyAutoHotkey.exe C:Program FilesAutoHotkeyv2AutoHotkey64.exe AutoHotkey
يتم دعم AutoHotkey V1 و V2 بالكامل ، على الرغم من أن بعض الاختلافات السلوكية ستحدث اعتمادًا على الإصدار الذي تستخدمه. انظر الملاحظات أدناه.
تتمثل الطريقة الموصى بها لتزويد AutoHotkey Binary (لكل من V1 و V2) في تثبيت الإضافية binary لهذه الحزمة. سيوفر ذلك التنفيذيين اللازمة والمساعدة في ضمان وضعها بشكل صحيح على المسار.
pip install "ahk[binary]"
بدلاً من ذلك ، يمكنك توفير المسار في الكود:
from ahk import AHK
ahk = AHK ( executable_path = 'C: \ path \ to \ AutoHotkey.exe' ) يمكنك أيضًا استخدام متغير بيئة AHK_PATH لتحديد الموقع القابل للتنفيذ.
set AHK_PATH=C:PathToAutoHotkey.exe
python myscript.py بشكل افتراضي ، عند تعيين أي معلمة executable_path (أو متغير بيئة AHK_PATH ) ، يتم البحث عن أسماء ثنائية AutoHotkey V1 فقط على مسار أو مواقع التثبيت الافتراضية. قد يتغير هذا السلوك في الإصدارات المستقبلية للسماح باستخدام V2 افتراضيًا.
لاستخدام AutoHotkey الإصدار 2 ، يمكنك القيام بأي من الأشياء التالية:
executable_path مع موقع ثنائي AutoHotkey V2AHK_PATH Environment مع موقع ثنائي AutoHotkey V2version مع القيمة v2 التي تتيح العثور على الأسماء الثنائية AutoHotkey V2 ومواقع التثبيت الافتراضية.على سبيل المثال:
from ahk import AHK
ahk = AHK ( executable_path = r'C:Program FilesAutoHotkeyv2AutoHotkey64.exe' )
# OR
ahk = AHK ( version = 'v2' ) عندما تقوم بتوفير وسيطة الكلمة الرئيسية version (إما "v1" أو "v2" ) ، يتم إجراء فحص لضمان مطابقة الثنائية المقدمة (أو المكتشفة) مع الإصدار المطلوب. عندما يتم حذف الكلمة الرئيسية version ، يتم تحديد الإصدار تلقائيًا من الثنائي القابل للتنفيذ (أو المكتشف).
تم تصميم واجهة برمجة تطبيقات هذا المشروع في الأصل ضد توقيعات AutoHotkey V1 وتوقيعات الوظائف هي نفسها ، حتى عند استخدام AutoHotkey V2. في حين أن معظم السلوك يبقى كما هو ، فإن بعض السلوك يتغير عند استخدام AutoHotkey V2 مقارنة بـ V1. هذا يرجع في الغالب إلى الاختلافات الأساسية بين الإصدارين.
تتضمن بعض الاختلافات البارزة التي قد تواجهها عند استخدام AutoHotkey V2 مع هذه المكتبة:
None (كما هو الحال في AutoHotkey V2 ، يتم إلقاء الهدف في معظم الحالات التي لا يمكن فيها العثور على النافذة أو التحكم)ControlSend ( ahk.control_send أو Window.send أو Control.send ) في AutoHotkey V2 عندما لا يتم تحديد معلمة control . في V1 ، يتم إرسال المفاتيح إلى أهم عناصر التحكم ، والتي عادة ما تكون السلوك الصحيح. في V2 ، يتم إرسال المفاتيح مباشرة إلى النافذة. هذا يعني في كثير من الحالات ، تحتاج إلى تحديد عنصر التحكم بشكل صريح عند استخدام V2.secondstowait لـ TrayTip ( ahk.show_traytip ) في V2. سيؤدي تحديد هذه المعلمة في غلاف Python إلى تنبعث تحذير ويتم تجاهل المعلمة.Input بدلاً من Event في V1 (نتيجة لذلك ، على سبيل المثال ، سيتم تجاهل معلمات سرعة الماوس إلى mouse_move و mouse_drag في V2 ما لم يتم تغيير وضع الإرسال)2 في AutoHotkey V2. إنه 1 في AutoHotkey V1. استخدم وسيطات الكلمات الرئيسية title_match_mode إلى win_get والأساليب الأخرى التي تقبل هذه الكلمة الرئيسية للتحكم في هذا السلوك أو استخدام set_title_match_mode لتغيير السلوك الافتراضي (يتم تشغيل المكالمات غير المحظورة في عمليات منفصلة ولا تتأثر بـ set_title_match_mode ) يمكنك تطوير ملحقات لتوسيع وظائف ahk - أي: كتابة رمز AutoHotkey الخاص بك وإضافة طرق إضافية إلى فئة AHK. انظر مستندات تمديد لمزيد من المعلومات.
جميع المساهمات موضع ترحيب وتقدير.
لا تتردد في فتح مشكلة github أو العلاقات العامة للتعليقات أو الأفكار أو طلبات الميزات أو الأسئلة.
هذه بعض المشاريع المماثلة التي تستخدم عادة للأتمتة مع بيثون.
keyboard ، السيطرة على الماوس Python النقي!