剪貼簿檔案拖放清單(CF_HDROP)

剪貼簿層原本能承載文字與影像,``rich_clipboard`` 又加入了 HTML,但框架始終無法把一份 *檔案清單*放上剪貼簿——也就是當你複製檔案後在他處 Ctrl+V 進行真正的檔案複製時, Explorer 讀取的 CF_HDROP 內容。建構這個位元組區塊相當瑣碎:一個固定 20 位元組的 DROPFILES 標頭,後接以雙重 null 結尾(預設 UTF-16)的路徑清單,且標頭的 pFiles 位移需指向該清單。clipboard_files 將這段容易出錯的封裝獨立出來。

封裝邏輯位於純粹、可完整單元測試的 build_dropfiles / parse_dropfiles 位元組函式 (不需裝置、任何平台皆可),其上再疊加僅限 Windows 的 set_clipboard_files / get_clipboard_files 薄包裝——與 rich_clipboard 處理 CF_HTML 的拆分方式相同。 純函式不匯入 PySide6

無頭 API

from je_auto_control import (build_dropfiles, parse_dropfiles,
                             set_clipboard_files, get_clipboard_files)

# 將兩個檔案放上剪貼簿,可貼進 Explorer(Windows)
set_clipboard_files([r"C:\reports\q1.pdf", r"C:\reports\q2.pdf"])
print(get_clipboard_files())

# 位元組層完全不需剪貼簿即可測試
blob = build_dropfiles([r"C:\a\one.txt"], point=(10, 20))
assert parse_dropfiles(blob)["paths"] == [r"C:\a\one.txt"]

build_dropfiles(paths, *, point=(0, 0), wide=True, non_client=False) 回傳原始 DROPFILES 位元組;``parse_dropfiles`` 將其還原為 {paths, point, wide, non_client}set_clipboard_files / get_clipboard_files 透過 Windows 剪貼簿寫入與讀取該清單 (無檔案清單時 get 回傳 None)。

執行器指令

AC_set_clipboard_files``(``paths{set, count})與 AC_get_clipboard_files (→ {found, paths})。兩者以 MCP 工具 ac_set_clipboard_files / ac_get_clipboard_files 及 Script Builder 指令 Set Clipboard Files / Get Clipboard Files**(位於 **Data 分類下)形式提供。