web-dev-qa-db-ja.com

LinuxのようにWindowsに選択したテキストを貼り付けます(マウスの中ボタン)

私はLinuxシステムでこの機能が本当に好きです。 Windowsシステムでも必要ですが、適切な解決策が見つかりませんでした。

私が見つけた解決策:

  • 真のXマウス
  • AutoclipX
  • Autohotkeyスクリプト

私が彼らに抱えていた問題:

  • True X-Mouseは、スタートメニューのようなメニューをいじるだけなので、Windowsでアクティブにしたくないマウスフォーカスを変更します。また、マウスの中ボタンがアクティブな場合、タブを閉じることはできません。
  • AutoClipXは、選択したテキストではなく、クリップボードのコンテンツを貼り付けるだけです。
  • Autohotkeyスクリプトが見つかりました ここ Windowsのコンソールを台無しにします。コンソールをクリックして切り替える場合は、コンソールに貼り付けられます。 Ctrl+C これはかなり迷惑です。

これらの3つの解決策で遭遇した問題の適切な解決策または修正を誰かが見つけましたか?

3
dun

選択した実装にコピー:

この方法で試してください:

#NoEnv
#SingleInstance Force

mousedrag_treshold := 20 ; pixels

Hotkey mbutton, paste_selection

; #IfWinNotActive ahk_class ConsoleWindowClass

~lButton::
    MouseGetPos, mousedrag_x, mousedrag_y
    keywait lbutton, T0.3 
    If (ErrorLevel)
    {
        keywait lbutton
        mousegetpos, mousedrag_x2, mousedrag_y2
        if (abs(mousedrag_x2 - mousedrag_x) > mousedrag_treshold
        or abs(mousedrag_y2 - mousedrag_y) > mousedrag_treshold)
        {
            ; MouseGetPos,,,WindowUnderMouse
            ; WinGetClass, Class, ahk_id %WindowUnderMouse%
            ; If (Class != "ConsoleWindowClass")
                sendinput ^c
            hotkey mbutton, on
        }
    }
return

~lButton Up:: return

; #IfWinNotActive

paste_selection:
    sendinput {lbutton}
    SendInput ^v
return
2
user3419297

最後に、上記のスクリプトを少し改善しました。クリップボードが占有されているかどうかを確認するifステートメントを追加し、貼り付け後にクリアしました。もう1つの改善点は、貼り付け後にホットキーのmボタンをオフにすることです。これにより、テキストを選択して次に[自動的に]コピーするまで、タブを閉じたりスクロールしたりするためのミドルクリックが妨げられません。

#NoEnv
#SingleInstance Force

mousedrag_threshold := 20 ; pixels

Hotkey mbutton, paste_selection

; #IfWinNotActive ahk_class ConsoleWindowClass

~lButton::
    MouseGetPos, mousedrag_x, mousedrag_y
    keywait lbutton, T0.3 
    If (ErrorLevel)
    {
        keywait lbutton
        mousegetpos, mousedrag_x2, mousedrag_y2
        if (abs(mousedrag_x2 - mousedrag_x) > mousedrag_threshold
        or abs(mousedrag_y2 - mousedrag_y) > mousedrag_threshold)
        {
            ; MouseGetPos,,,WindowUnderMouse
            ; WinGetClass, Class, ahk_id %WindowUnderMouse%
            ; If (Class != "ConsoleWindowClass")
                sendinput ^c
            hotkey mbutton, on
        }
    }
return

~lButton Up:: return

; #IfWinNotActive

変更された部分:

paste_selection:

    if clipboard!=""
            {
            sendinput {lbutton}
            SendInput ^v
            Sleep, 200 ; Give some time for the text to be pasted.
            clipboard = ; clear the clipboard
            hotkey mbutton, off
            }

    return
1
Hariks0