2017-09-02 4 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

私はあなたのコードからスリープステートメントを削除しますが、選択とクリップボードのデータは、画像データのように、比較的大きかった場合にのみ、問題を再現することができます。

私はあなたのコードに2つの変更行わ:このコードはまだ動作しない場合これは、クリップボードと選択

^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文を使用して回避策なしで*確実に*クリップボードに対応できますか? (Btw私はスタイル 'variable =%ClipoardAll%'の割り当てが問題の一部であることを発見した。クリップボードのバックアップの正しい形式は 'variable:= ClipboardAll'であり、動作も異なっている) – miroxlav

+0

私が投稿した回答はsleep文を使用せず、私のために確実に動作します。任意の大きなクリップボードの内容をサポートしたい場合は、ClipWaitを増やしてツールチップを使用して、何が起こっているかをユーザーに知らせることをお勧めします。 –

+0

これらの改善についてもう一度感謝します。私は答えをアップアップしましたが、現在は「Sleep」ステートメントの必要性の魔法を払拭しなかったので、それを受け入れたものとしてマークしません。あなたのコードを使用している場合、 'Send^v'の前後に' Sleep'を挿入するまでは、それは無理なく動作します。したがって、「睡眠」の魔法はまだ安定のために必要であるようです。 「睡眠」のない道があるかどうかという疑問はまだ開いている。 AutoHotKeyエキスパートとして、「スリープ」以外の手段がないと書いても、私はその答えを受け入れます。 – miroxlav

関連する問題