我非常喜欢 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