0

私のクリップボードコントローラーは、ホットキー(CTRL+ SHIFT+ Q)を使用すると、1つのアイテムだけでなく、複数のアイテムをクリップボードにコピーして、一度にすべて貼り付ける(CTRL+ SHIFT+ W)か、最初の10個のアイテムのいずれかを直接貼り付ける(CTRL+ SHIFT+ 19)ことができます。 。もう1つのオプションは、クリップボードをクリアすることです(CTRL+ SHIFT+ -)。

いくつかのコピーアンドペーストでのみ機能しますが、コピー操作を実行しようとすると、バッファに何も追加されません。その理由が見つかりませんでした。

addToClipboard()コード(問題はまたはにあるはずですgetAll()):

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>

Global $clipBoard[50]=[""]
Global $counter = 0

HotKeySet("^+q","addToClipboard")
HotKeySet("^+-","emptyAll")
HotKeySet("^+w","getAll")
HotKeySet("^+1","get1")
HotKeySet("^+2","get2")
HotKeySet("^+3","get3")
HotKeySet("^+4","get4")
HotKeySet("^+5","get5")
HotKeySet("^+6","get6")
HotKeySet("^+7","get7")
HotKeySet("^+8","get8")
HotKeySet("^+9","get9")

$hGUI = GuiCreate("Clipboard Controller", 100, 100,Default,Default,$WS_SIZEBOX)
GUISetState()

Func addToClipboard()
    Send ("^c")
    $copied = ClipGet()
    $clipBoard[Mod($counter,50)] = $copied
    $counter +=1
EndFunc

Func getByIndex($i)
    $statement = $clipBoard[$i]
    ClipPut($statement)
    Send("^v")
EndFunc

Func getAll()
    $statement =""
    For $i In $clipBoard
        If $i <> "" Then
            $statement &= $i & @CRLF
        EndIf
    Next
    ClipPut($statement)
    Send("^v")
EndFunc

Func emptyAll()
    For $i=0 To 49
        $clipBoard[$i]=""
    Next
    ClipPut("")
EndFunc

Func get1()
    getByIndex(0)
EndFunc

Func get2()
    getByIndex(1)
EndFunc

Func get3()
    getByIndex(2)
EndFunc

Func get4()
    getByIndex(3)
EndFunc

Func get5()
    getByIndex(4)
EndFunc

Func get6()
    getByIndex(5)
EndFunc

Func get7()
    getByIndex(6)
EndFunc

Func get8()
    getByIndex(7)
EndFunc

Func get9()
    getByIndex(8)
EndFunc

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
4

3 に答える 3

2

問題は古い罠です...

特に大きなものをクリップボードにコピーするのに少し時間がかかります。送信後にスリープしてみてください。

Func addToClipboard()
Send ("^c")
sleep(1000) ; try different values
    $copied = ClipGet()
$clipBoard[Mod($counter,50)] = $copied
$counter +=1
EndFunc

とにかくあなたのスクリプトのように..アイデア

于 2012-12-24T12:16:39.030 に答える
1

これで問題が解決したことを願っています。クリップボードからデータを設定/取得する別の方法を見つけました。関数:_ClipBoard_SetData ()_ClipBoard_GetData()ライブラリから<Clipboard.au3>、それらを試した後、うまく機能しました。結局のところ、問題はクリップボードからのデータの設定と取得にあったようです。 ..後で来るisAは、最終的に正しいかどうかを確認します

于 2012-05-14T13:34:39.250 に答える
1

addToClipboard問題は、ユーザーがまだキーを押している間にのコードが実行されていることです。その結果、Send送信するように設計されたコマンドCtrl+Cは実際には送信Ctrl+Shift+Cしているため、テキストがコピーされることはありません。

解決策は、ユーザーが関数を使用してこれらのキーを上げるのを待ってから、_IsPressedすべてのキーが解放されたら、コードを実行することです。また、関数に入るときにホットキーを無効にして(そして、関数を離れるときに再度有効にして)、ホットキーを長時間押し続けても関数がトリガーされないようにすることをお勧めします。

WM_COPY別の方法は、フォーカスのあるコントロールにメッセージを直接送信することです。これは、すべてのコントロールで機能することが保証されているわけではありません(ただし、機能しなかった場合は非常に驚きます)。これははるかに信頼性の高い方法です。

于 2012-05-08T20:33:00.823 に答える