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

如何用AutoHotKey获取在线Java格式化工具的textarea文本值?

解决无法获取Ace编辑器文本内容的问题

你遇到的核心问题是:页面里的<textarea class="ace_text-input">是Ace代码编辑器的隐藏辅助输入框,实际的代码内容并不存储在这个元素的value属性里。Ace编辑器会把代码内容渲染到自己的专属DOM结构中,或者通过其JavaScript API来存取内容,直接读取这个隐藏输入框自然拿不到有效内容。

下面提供两种可行的解决方案:

方法1:通过Ace编辑器的JavaScript API获取内容

Ace编辑器提供了官方API来安全存取编辑区内容,这是最可靠的方式。你可以在AutoHotKey中调用浏览器的JavaScript执行功能来实现:

示例AutoHotKey代码(以Chrome为例,使用Chrome.ahk库)

#Include Chrome.ahk

^+b::
    ; 复制选中的目标代码
    Send ^c
    Sleep 100

    ; 初始化Chrome实例并打开格式化页面
    ChromeInst := new Chrome("Profile1")
    ChromeInst.Navigate("https://www.tutorialspoint.com/online_java_formatter.htm")
    ChromeInst.WaitForPageLoad()

    ; 粘贴代码到Ace编辑器(通过JSAPI设置内容)
    ChromeInst.Evaluate("editor.setValue(clipboardData.getData('text'));")
    Sleep 500

    ; 触发格式化按钮点击
    ChromeInst.Evaluate("document.querySelector('button:contains('Format')').click();")
    Sleep 1000

    ; 获取格式化后的代码
    formattedCode := ChromeInst.Evaluate("return editor.getValue();").value

    ; 将结果复制到剪贴板
    Clipboard := formattedCode
    MsgBox 格式化完成,代码已复制到剪贴板!

    ; 关闭浏览器实例
    ChromeInst.Kill()
return

方法2:直接从DOM结构中提取文本

如果不想依赖API,也可以直接从Ace编辑器渲染的DOM元素中提取内容——Ace会把每一行代码放在带.ace_line类的元素里:

可在AHK中执行的JavaScript代码片段

// 获取所有代码行元素
const lineElements = document.querySelectorAll('.ace_content .ace_line');
let formattedText = '';
for (const elem of lineElements) {
    formattedText += elem.innerText + '\n';
}
return formattedText.trim();

把这段JS通过AHK的浏览器执行功能调用,就能拿到格式化后的完整代码文本。

补充说明

那个ace_text-input的textarea是Ace编辑器用来处理键盘输入的临时隐藏元素,它的value只会存储极少量的输入快照,不会保存完整的代码文本,这就是你之前无法获取有效内容的根本原因。

内容的提问来源于stack exchange,提问作者neural-network

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:24:37