在動作群組中持續按住修飾鍵

hotkey 按下一組鍵後立即放開——適合一次性的組合鍵,但先前無法在*多個獨立動作之間持續按住* ctrl (或 shift)(以 shift 連點做範圍選取、以 ctrl 連點做多選),也無法確保即使其中某個動作拋例外時修飾鍵仍會 被放開。

plan_with_modifiers() 以 press / release 步驟包覆操作步驟清單,為純函式、可單元測試;:func:hold_modifiers 是一個 context manager,進入時按下、離開時(含例外情況)以反向順序放開,並透過可注入的 sink 派發。 不匯入 PySide6

無頭 API

from je_auto_control import hold_modifiers, plan_with_modifiers
from je_auto_control import click_mouse

# 按住 shift 做範圍選取:每次點擊都在 shift 按下狀態進行
with hold_modifiers(["shift"]):
    click_mouse("mouse_left", 100, 100)
    click_mouse("mouse_left", 100, 300)
# shift 在此放開——即使某次點擊拋例外也是

plan_with_modifiers([{"op": "click"}], ["ctrl", "shift"])
# 按 ctrl、按 shift、click、放 shift、放 ctrl

修飾鍵進入時依序按下、離開時在 finally 區塊以*反向*順序放開,因此卡住的修飾鍵絕不會外洩。 plan_with_modifiers 是任意操作步驟清單的純計畫。

執行器命令

AC_with_modifiers 在按住 modifiers``(如 ``["ctrl"]"ctrl+shift")時執行巢狀 JSON 動作清單, 即使某動作失敗也會放開修飾鍵。它以 MCP 工具 ac_with_modifiers 以及 Script Builder 中 Keyboard 分類下 的命令提供。