You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AHK自定义GUI多行粘贴至多编辑框及数组读取问题求助

解决AutoHotKey GUI多行粘贴与数组读取问题

我明白你折腾了很久的困扰——粘贴换行列表只有第一项能进编辑框,还有点击Continue要把内容读到数组里。下面给你调整后的代码,完美解决这两个需求:

一、核心修改点说明

1. 多行粘贴自动填充

添加全局的^v热键,捕获粘贴操作:

  • 读取剪贴板内容,用StrSplit按换行符分割成子项列表
  • 循环将子项依次填入10个编辑框,超出10项的部分自动忽略

2. 读取内容到数组

在GoCont标签里:

  • 创建一个空数组inputArray
  • 遍历10个编辑框,将每个框的内容添加到数组中
  • 可以通过MsgBox验证数组内容(也可以根据需求做后续处理)

二、完整修改后的代码

#SingleInstance Force ; 确保只运行一个脚本实例

Gui, Add, Text,, Please add the List that you want (10 Max at once)
; 统一变量名更清晰,从vInput1到vInput10
Gui Add, Edit, vInput1,
Gui Add, Edit, vInput2,
Gui Add, Edit, vInput3,
Gui Add, Edit, vInput4,
Gui Add, Edit, vInput5,
Gui Add, Edit, vInput6,
Gui Add, Edit, vInput7,
Gui Add, Edit, vInput8,
Gui Add, Edit, vInput9,
Gui Add, Edit, vInput10,
Gui Add, Button, x200 y270 w88 h26 gGoCont, Continue
Gui Add, Button, x290 y270 w88 h26 gGoQuit, Cancel
Gui Show, , Custom List Input ; 给GUI加个标题
return

; 捕获Ctrl+V粘贴操作
^v::
    ClipWait, 1 ; 等待剪贴板内容就绪
    if ErrorLevel {
        MsgBox, 剪贴板无内容!
        return
    }
    ; 按换行符分割剪贴板内容,忽略空行(如果需要保留空行可以去掉Trim参数)
    inputList := StrSplit(Clipboard, "`n", "`r")
    ; 循环填充10个编辑框
    Loop, 10 {
        if (A_Index <= inputList.Length()) {
            GuiControl,, Input%A_Index%, % inputList[A_Index]
        } else {
            GuiControl,, Input%A_Index%, ; 清空超出部分的编辑框
        }
    }
return

GoCont:
    ; 创建空数组
    inputArray := []
    ; 遍历10个编辑框,收集内容到数组
    Loop, 10 {
        GuiControlGet, currentValue,, Input%A_Index%
        ; 如果需要忽略空项,就加个判断:if (currentValue != "")
        inputArray.Push(currentValue)
    }
    ; 验证数组内容(可以删除这部分,换成你的业务逻辑)
    MsgBox, 读取到的数组内容:`n%StrJoin(inputArray, "`n")%
return

GoQuit:
    Gui Destroy
    ExitApp ; 退出脚本,避免后台残留
return

; 辅助函数:将数组元素用指定分隔符拼接成字符串
StrJoin(array, delimiter="") {
    result := ""
    for index, value in array {
        result .= (index=1 ? "" : delimiter) . value
    }
    return result
}

三、使用说明

  1. 运行脚本后,打开GUI
  2. 直接按Ctrl+V粘贴换行分隔的列表,内容会自动填充到10个编辑框
  3. 点击Continue,脚本会把所有编辑框的内容读取到数组中,并用MsgBox展示验证
  4. 如果不需要空项,可以在GoCont的循环里加上if (currentValue != "")再Push到数组

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:38