像在 Linux 上一样在 Windows 上粘贴选定的文本(鼠标中键)

像在 Linux 上一样在 Windows 上粘贴选定的文本(鼠标中键)

我非常喜欢 Linux 系统上的这个功能。我也想在 Windows 系统上使用它,但我没有找到合适的解决方案。

我找到的解决方案:

  • 真X鼠标
  • 自动夹X
  • Autohotkey 脚本

我遇到的问题有:

  • 真X鼠标更改鼠标焦点,我不希望它在 Windows 上处于活动状态,因为它只会干扰菜单,如开始菜单。此外,如果鼠标中键处于活动状态,则无法用它关闭选项卡。
  • 自动剪辑X仅粘贴剪贴板内容而不是选定的文本。
  • 自动热键找到脚本这里会干扰 Windows 上的控制台。如果您通过单击切换到控制台,它会粘贴一个Ctrl+ C,这非常烦人。

是否有人找到了适当的解决方案或修复了我在使用这 3 种解决方案时遇到的问题?

答案1

选择实现时复制:

尝试以下方法:

#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

我在最后对上面的脚本做了一些改进。只是添加了一个 if 语句来检查剪贴板是否被占用,并在粘贴后将其清除。另一个改进是在粘贴后关闭热键 mbutton,这样它就不会干扰中键单击以关闭选项卡或滚动,直到下次选择某些文本并 [自动] 复制。

#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

相关内容