查看: 176|回复: 1

拖动复制/点击粘贴

[复制链接]
发表于 2026-1-8 13:44 | 显示全部楼层 |阅读模式
一个人的冬季 2026-1-8 13:44 176 1 显示全部楼层
拖动即是复制
逻辑是判断、输入框内闪烁的“工”形符号的光标,点击后马上粘贴
重复内容粘贴,直接跳过
  1. #SingleInstance Force
  2. #Warn All, Off
  3. SetWorkingDir A_ScriptDir
  4. ; ===================== 全局变量定义 =====================
  5. IsPaused := false
  6. ShowSkipWarning := true
  7. ; F8 控制的变量
  8. F9DragCopyMode := false
  9. F11AutoPasteMode := false
  10. ; F9 控制的变量
  11. GlobalWheelEnable := false
  12. dragStarted := false
  13. startX := 0, startY := 0
  14. LastClipboardContent := ""
  15. ; ===================== 提示函数 =====================
  16. ShowTip(Text, Duration := 850) {
  17.     ToolTip(Text)
  18.     SetTimer(ToolTip, -Duration)
  19. }
  20. ; =====================拖动复制 + 点击粘贴 ( F8 激活) =====================
  21. #HotIf (!IsPaused && F9DragCopyMode)
  22. ~LButton::
  23. {
  24.     global dragStarted, startX, startY
  25.     MouseGetPos(&startX, &startY)
  26.     dragStarted := true
  27. }
  28. ~LButton Up::
  29. {
  30.     global dragStarted, startX, startY
  31.     if (dragStarted) {
  32.         MouseGetPos(&endX, &endY)
  33.         dragDistance := sqrt(Abs((endX - startX)**2 + (endY - startY)**2))
  34.         dragStarted := false
  35.         if (dragDistance > 10) {
  36.             Send("^c") ; 复制
  37.             ShowTip(" 已复制")
  38.         }
  39.         else {
  40.             Sleep(100)
  41.             ; 1. 检测 I 形光标
  42.             isCursorIBeam := (A_Cursor == "IBeam")
  43.             ; 2. 获取控件信息
  44.             MouseGetPos(, , &hWin, &ClassNN)
  45.             WinClass := WinGetClass("ahk_id " hWin)
  46.             isEditControl := (InStr(ClassNN, "Edit") || InStr(ClassNN, "Rich") || InStr(ClassNN, "Scintilla") || InStr(ClassNN, "ComboBox") || InStr(ClassNN, "Thunder") || ClassNN = "DirectUIHWND" || InStr(ClassNN, "WPF"))
  47.             isBrowser := (InStr(WinClass, "Chrome") || InStr(WinClass, "Edge") || InStr(WinClass, "CabinetWClass"))
  48.             ; 3. 判定是否粘贴
  49.             if (isCursorIBeam || isEditControl || isBrowser) {
  50.                 global LastClipboardContent, ShowSkipWarning
  51.                 ; 【防重复】仅当剪切板有变动时粘贴
  52.                 if (A_Clipboard != "" && A_Clipboard != LastClipboardContent) {
  53.                     Send("^v")
  54.                     LastClipboardContent := A_Clipboard
  55.                     ShowTip("已粘贴")
  56.                 } else if (A_Clipboard == LastClipboardContent) {
  57.                     ; 【新增判断】只有在 ShowSkipWarning 为 true 时才提示
  58.                     if (ShowSkipWarning)
  59.                         ShowTip("⚠️重复内容跳过")
  60.                 }
  61.             }
  62.         }
  63.     }
  64.     return
  65. }
  66. #HotIf
  67. ; ===================== 滚轮功能 ( F9 激活) =====================
  68. #HotIf (!IsPaused && GlobalWheelEnable)
  69. WheelUp::Send("^c"), ShowTip("✅ 滚轮向上▲复制成功")
  70. WheelDown::Send("^v"), ShowTip("✅ 滚轮向下▼粘贴成功")
  71. #HotIf
  72. ; ===================== 所有功能暂停或恢复 =====================
  73. `::
  74. Tray_PauseResume(*) {
  75.     global IsPaused
  76.     Pause(!IsPaused)
  77.     IsPaused := !IsPaused
  78.     if (IsPaused) {
  79.         ShowTip("⏸️ 所有功能已暂停")
  80.     } else {
  81.         ShowTip("▶️ 所有功能已恢复")
  82.     }
  83. }
  84. ; F9 专门开关:开启 滚轮
  85. F9::Tray_WheelSwitch()
  86. Tray_WheelSwitch(*) {
  87.     global GlobalWheelEnable
  88.     GlobalWheelEnable := !GlobalWheelEnable
  89.     if (GlobalWheelEnable) {
  90.         ShowTip("🔄 滚轮模式已开启:`n滚轮上 ▲ 复制`n滚轮下 ▼ 粘贴", 2000)
  91.     } else {
  92.         ShowTip("⛔ 滚轮模式已关闭")
  93.     }
  94. }
  95. ; F8 主控开关:开启 拖动+点击
  96. F8::
  97. Tray_MasterSwitch(*) {
  98.     global F9DragCopyMode, F11AutoPasteMode
  99.     F9DragCopyMode := !F9DragCopyMode
  100.     F11AutoPasteMode := F9DragCopyMode ; 同步状态
  101.     if (F9DragCopyMode) {
  102.         ShowTip("🚀 智能鼠标模式已开启:`n1. 拖动文本自动复制`n2. 点击输入框自动粘贴", 3000)
  103.     } else {
  104.         ShowTip("⭕ 智能鼠标模式已关闭")
  105.     }
  106. }
  107. ; ===================== 重复提示开关函数 =====================
  108. Tray_SkipWarningToggle(*) {
  109.     global ShowSkipWarning
  110.     ShowSkipWarning := !ShowSkipWarning
  111.     if (ShowSkipWarning) {
  112.         ShowTip("✅ 重复提示已开启")
  113.     } else {
  114.         ShowTip("❌ 重复提示已关闭")
  115.     }
  116. }
  117. ; ===================== LWin 拖动复制 (备用:仅复制) =====================
  118. #HotIf (!IsPaused && F9DragCopyMode)
  119. LWin::
  120. {
  121.     global dragStarted, startX, startY
  122.     Send("{LButton Down}")
  123.     MouseGetPos(&startX, &startY)
  124.     dragStarted := true
  125.     KeyWait("LWin")
  126.     Send("{LButton Up}")
  127.     if (dragStarted) {
  128.         MouseGetPos(&endX, &endY)
  129.         dragDistance := sqrt(Abs((endX - startX)**2 + (endY - startY)**2))
  130.         if (dragDistance > 10) {
  131.             Send("^c")
  132.             ShowTip("✅ 已复制")
  133.         }
  134.         dragStarted := false
  135.         startX := 0, startY := 0
  136.     }
  137. }
  138. #HotIf
  139. ; ===================== 托盘菜单实现 =====================
  140. 创建托盘菜单() {
  141.     A_TrayMenu.Delete()
  142.     A_TrayMenu.Add("暂停/继续 (~)在ESC下面", Tray_PauseResume)
  143.     A_TrayMenu.Add("拖动复制/点击粘贴 (F8) ", Tray_MasterSwitch)
  144.     A_TrayMenu.Add("滚轮上复制/下粘贴 (F9)  ", Tray_WheelSwitch)
  145.     A_TrayMenu.Add("重复文本提示开关", Tray_SkipWarningToggle)
  146.     A_TrayMenu.Add()
  147.     A_TrayMenu.Add("退出脚本", (*) => ExitApp())
  148.     TraySetIcon(A_IsCompiled ? A_ScriptFullPath : A_AhkPath)
  149.     TrayTip("复制粘贴增强脚本", "▶️ 已运行`nF8: 鼠标模式`nF9: 滚轮模式", 1000)
  150. }
  151. 创建托盘菜单()
复制代码


拖动复制点击粘贴 -.zip

469.34 KB, 下载次数: 1, 下载积分: 牛币 -2 个

发表于 2026-1-9 11:16 | 显示全部楼层
txy1978 2026-1-9 11:16 显示全部楼层
我是来刷分的,嘿嘿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表