AutohotKey 脚本用于在 Win10 中选择复制并单击鼠标中键粘贴

AutohotKey 脚本用于在 Win10 中选择复制并单击鼠标中键粘贴

与问题类似这里,我找到了一个 AutohotKey 脚本(解决方案) 以便复制突出显示的文本并通过单击鼠标中键进行粘贴。但是脚本中仍然缺少一些东西。此脚本仅在我突出显示文本时才有效。我想知道如何修改它,以便当我双击文本中的单词并突出显示时它也有效。

cos_mousedrag_treshold := 20 ; pixels


#IfWinNotActive ahk_class ConsoleWindowClass

~lButton::
  MouseGetPos, cos_mousedrag_x, cos_mousedrag_y
  keywait lbutton
  mousegetpos, cos_mousedrag_x2, cos_mousedrag_y2
  if (abs(cos_mousedrag_x2 - cos_mousedrag_x) > cos_mousedrag_treshold
    or abs(cos_mousedrag_y2 - cos_mousedrag_y) > cos_mousedrag_treshold)
  {
    wingetclass cos_class, A
    if (cos_class == "Emacs")
      sendinput !w
    else
      sendinput ^c
  }
  return

~mbutton::
  WinGetClass cos_class, A
  if (cos_class == "Emacs")
    SendInput ^y
  else
    SendInput ^v
  return

#IfWinNotActive


;; clipx
^mbutton::
  sendinput ^+{insert}
  return

答案1

您可以像这样修改代码:

~lButton::
  if (A_PriorHotKey = "~lButton" && A_TimeSincePriorHotkey < "500") {
    if (cos_class == "Emacs")
      sendinput !w
    else
      sendinput ^c
    }
  // rest of code //

如果您双击得更快/更慢,则以毫秒为单位将 500 调整为更高或更低的值。

答案2

使用此处链接的优秀 AHK-v2-script-converter:https://github.com/mmikeww/AHK-v2-script-converter

我能够将此脚本转换为在 Auto Hot Key 2.0 版中运行。此脚本可实现以下功能:

  • 复制突出显示的文本
  • 双击复制文本
  • 单击鼠标中键粘贴文本

感谢 H'H 提供的原始问题/代码示例。

cos_mousedrag_treshold := 20 ; pixels

#HotIf !WinActive("ahk_class ConsoleWindowClass", )

~lButton::
{ ; V1toV2: Added bracket
 /*
  * Detects a double click and copies text after a short delay
  */
  If (A_TimeSincePriorHotkey != ''){
    If (A_TimeSincePriorHotkey<400) and (A_PriorHotkey="~LButton"){
      Sleep 100
      SendInput("^c")
      return
    }
  }

  MouseGetPos(&cos_mousedrag_x, &cos_mousedrag_y)
  KeyWait("lbutton")
  MouseGetPos(&cos_mousedrag_x2, &cos_mousedrag_y2)
  if (abs(cos_mousedrag_x2 - cos_mousedrag_x) > cos_mousedrag_treshold
    or abs(cos_mousedrag_y2 - cos_mousedrag_y) > cos_mousedrag_treshold)
  {
    cos_class := WinGetClass("A")
    if (cos_class == "Emacs")
      SendInput("!w")
    else
      SendInput("^c")
  }
  return
} ; V1toV2: Added Bracket before hotkey or Hotstring

~mbutton::
{ ; V1toV2: Added bracket
  cos_class := WinGetClass("A")
  if (cos_class == "Emacs")
    SendInput("^y")
  else
    SendInput("^v")
  return
} ; V1toV2: Added bracket in the end

#HotIf !WinActive(, )


;; clipx
^mbutton::
{ ; V1toV2: Added bracket
  SendInput("^+{insert}")
  return
} ; V1toV2: Added bracket in the end

我无法使用 Nelson 建议的双击复制功能来处理包含的代码,但我摆弄了一下,让它工作了。可能还有改进空间。

另外,我注意到我的工作流程通常是复制一段文本,突出显示另一段文本,然后删除/替换它。使用此脚本,它会自动复制第二段文本(而不是我想要粘贴的原始文本)。我一直在寻找解决方案,或者调整我的工作流程。

我还注意到,在应用程序之间切换时,AHK 有时会抛出错误,在某些应用程序(如 Excel)中,双击和单击并拖动会导致行为与您在 Linux 中预期的不同。因此,这个脚本肯定可以通过忽略特定应用程序或集成自己的剪贴板来改进。

相关内容