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

AutoHotkey中Send发送字符串乱序的原因排查

问题:AutoHotkey v2循环发送文本行时出现内容顺序错乱

我用以下AutoHotkey v2脚本读取文本文件并循环发送每行内容:

#Requires AutoHotkey v2.0+ 
TextToSend := FileRead("textToSend.txt")
lines := StrSplit(TextToSend, "\n")

:*:st::{    
    Loop        
    {        
        SetKeyDelay 10000        
        Send(lines[A_Index])        
        Send, {Enter}        
        Sleep 10000    
    }
}

原本运行正常,但现在发送的字符串出现顺序错乱。比如原行内容:

abcdefghijkmnopqrstuvwxyz

发送后变成:

abcdhijkmnopqrstuvwxyzefg

实际发送的文本文件前5行输出内容如下:

52m NGUYỄN THỊ TRANG 73 | PL 17/4/2024 | 8 A 4 Đông Nhì, Lái Thiêu, Thuận An, Bình Dương | 203 | 8 A 4 Đông Nhì, Lái Thiêu, Thuận An, Bình Dương | 7.281.533đ | Na Khu Chế Xuất Linh Trung 2, Bình Chiểu, Thủ Đức, Hồ Chí Minh | 0824831562
ChochNGUYNTHT, Công ty Tài chính Ngân hàng Việt Nam Thịnh Vượng SMBC FC liên lạc để nhắc nhở về khoản vay có số hợp đồng là 20220717-2950586 của chị đến hạn cần thanh toán. Chị có thể thanh toán qua các điểm thu hộ toàn quốc như bưu điện, Thế Giới Di Động, Điện Máy Xanh, app Momo, v.v. Chị thanh toán 3.000.000đ trước 15:00 ngày 14/11/2024. Sau thời gian trên, nếu chị chưa thanh toán, sẽ có nhân viên tiếp tục liên lạc gửi thư báo từ công ty về địa chỉ của chị. Vui lòng thanh toán đúng hạn để tránh phát sinh những hệ lụy ảnh hưởng mà chị đã cam kết trong điều khoản hợp đồng.GRAN
20mBITHỊ NHỎ 76 | CRC 1/6/2023 | Bình Nhâm Tỉnh Bình Dương Tỉnh Bình Dương, ??, ??, Bình Dương | 390 | Bình Nhâm Tỉnh Bình Dương Tỉnh Bình Dương, ??, ??, Bình Dương | ∅ | Bình Nhâm, ??, ??, ?? | 0812622775
Chochị BÙI THỊ NHỎ, Công ty Tài chính Ngân hàng Việt Nam Thịnh Vượng SMBC FC liên lạc để nhắc nhở về khoản vay có số hợp đồng là 1500040018188853 của chị đến hạn cần thanh toán. Chị có thể thanh toán qua các điểm thu hộ toàn quốc như bưu điện, Thế Giới Di Động, Điện Máy Xanh, app Momo, v.v. Chị thanh toán 3.000.000đ trước 15:00 ngày 14/11/2024. Sau thời gian trên, nếu chị chưa thanh toán, sẽ có nhân viên tiếp tục liên lạc gửi thư báo từ công ty về địa chỉ của chị. Vui lòng thanh toán đúng hạn để tránh phát sinh những hệ lụy ảnh hưởng mà chị đã cam kết trong điều khoản hợp đồng.
32mVTH HƯƠNG 84 | CRC 1/10/2024 | ∅, Bình Hòa, Thuận An, Bình Dương | 180 | ∅, Bình Hòa, Thuận An, Bình Dương | 1.276.713đ | Số 96 B Phố, Định Công, Hoàng Mai, Hà Nội | 0329906019Ị

原因分析

  • 换行符分割错误:使用StrSplit(TextToSend, "\n")分割文本,但Windows系统中文本文件的换行符通常是\r\n(回车+换行),直接用\n分割会导致部分行末尾残留\r不可见字符,干扰Send的发送逻辑,引发内容错位。
  • Send模式与按键延迟不兼容:Send默认使用SendInput模式,该模式为异步发送按键,SetKeyDelay仅对SendEvent和SendPlay模式生效,对SendInput无效。当系统负载高或目标应用响应慢时,异步发送的按键易出现顺序错乱、部分按键被跳过或延迟触发的情况。
  • 循环无终止条件:Loop未设置终止逻辑,当A_Index超过lines数组长度时,lines[A_Index]返回空字符串,脚本仍会发送空内容+回车,可能干扰未完成的发送流程。

修复建议

  • 修正换行符分割:使用StrSplit(TextToSend, ["rn", "n", "r"])兼容不同系统的换行格式,避免残留不可见字符。
  • 切换Send模式并确保延迟生效:改用SendEvent或SendPlay模式,让SetKeyDelay设置生效,示例:
    SetKeyDelay 100, 100  ; 第一个参数为按键按下到释放的延迟,第二个为按键间的延迟
    SendEvent(lines[A_Index])
    
  • 添加循环终止条件:将Loop改为Loop lines.Length,避免越界访问空内容:
    Loop lines.Length
    {        
        SetKeyDelay 100, 100        
        SendEvent(lines[A_Index])        
        SendEvent("{Enter}")        
        Sleep 10000    
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:05:12