2017-09-02 52 views
0

我創建了簡單的宏來交換剪貼板內容與當前選擇。但是,當我刪除Sleep命令時,它會停止正常工作:它不會完成剪貼板操作。試試沒有這些命令來看看我的意思。剪貼板操作不需要人工延遲使用睡眠語句

Sleep命令比適當的解決方案更加黑客。如果500毫秒太長 - 或者在某些情況下 - 等待時間太短會怎樣?

請問沒有Sleep表示合適的AutoHotKey方法是什麼?

^CapsLock:: 
    ClipboardOld=%ClipboardAll% 
    Send ^c 
    Sleep 500 
    ClipWait 
    ClipboardNew=%ClipboardAll% 
    Sleep 500 
    Clipboard=%ClipboardOld% 
    Sleep 500 
    ClipboardOld= ;clear global variable to conserve memory 
    Send ^v 
    Sleep 500 
    Clipboard=%ClipboardNew% 
    Sleep 500 
    ClipboardNew= ;clear global variable to conserve memory 
    Return 

回答

1

我刪除了睡眠語句從您的代碼,但在選擇和剪貼板數據是比較大的,只能重現的問題,像圖像數據。

我做了兩個修改了代碼:

這種交換剪貼板和選擇

^CapsLock:: 
    tooltip loading clipboard 
    ClipboardOld := ClipboardAll 
    clipboard=      ; makes ClipWait wait for NEW clipboard 
    Send ^c 
    ClipWait 30,1     ; "1" watches for both text and binary data 
    tooltip swapping clipboard 
    ClipboardNew := ClipboardAll 
    Clipboard := ClipboardOld 
    ClipboardOld= 
    Send ^v 
    Clipboard := ClipboardNew 
    ClipboardNew= 
    tooltip 
    return 

如果此代碼仍然沒有工作,我建議試圖確定哪些睡眠語句是必要的,使代碼正常工作。使用分而治之的方法和消除過程,刪除一半的睡眠語句並進行測試,直到找到所需的語句。

更新:這試圖解決在評論部分中描述的問題:

^CapsLock:: 
    tooltip loading clipboard 
    ClipboardOld := ClipboardAll 
    clipboard= 
    Send ^c 
    ClipWait 30,1 
    tooltip swapping clipboard 
    ClipboardNew := ClipboardAll 
    Clipboard=     ; reset clipboard to enable ClipWait 
    Clipboard := ClipboardOld 
    ClipWait 30,1 
    ClipboardOld= 

    Send ^v 
    Clipboard=     ; reset clipboard to enable ClipWait 
    Clipboard := ClipboardNew 
    ClipWait 30,1    ; Wait for clipboard to restore 
    ClipboardNew= 
    tooltip 
    return 
+0

謝謝你的回答。我可以確定哪些睡眠語句是必要的(正如您所說,問題與大數據或高CPU負載有關),但是我的問題是在保持代碼可靠工作的同時是否可以完全忽略它們,因爲我想了解原理。 AutoHotKey能否可靠地使用剪貼板工作,而無需使用Sleep語句的解決方法? (順便說一下,我發現在樣式'變量=%ClipoardAll%'中的賦值是問題的一部分。剪貼板備份的正確形式是'variable:= ClipoardAll',它的行爲也不同。) – miroxlav

+0

我發佈的答案沒有使用sleep語句,對我來說可靠地工作。如果你想支持任意大的剪貼板內容,我建議增加ClipWait並使用工具提示讓用戶知道發生了什麼。 –

+0

我再次感謝您的這些改進。我提出了答案,但我現在不會將其標記爲接受,因爲它沒有解除需要「睡眠」陳述的魔力。如果我使用你的代碼,它將不可靠地工作,直到我在'Send^v'前後插入'Sleep'。所以具有「睡眠」的魔法似乎仍然是穩定的必要條件。沒有「睡眠」的方式是否仍然存在。如果您寫作AutoHotKey專家,除了使用「睡眠」之外沒有其他辦法,我會接受答案。 – miroxlav