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

如何替换可执行文件的RCData资源并解决多余空行问题

问题原因

你当前的代码逻辑是按照Windows字符串表资源的格式构造缓冲区,每个字符串前加了2字节的长度前缀,但已编译AutoHotkey脚本的RCData资源存储规则是不带任何前缀的UTF-16LE纯文本内容,你多加的长度前缀就是文件开头多出的不可见字符,在编辑器中会被识别为空行,也会导致AutoHotkey加载脚本时解析失败。

修复方案

删除多余的长度前缀写入逻辑,直接将脚本内容写入缓冲区即可,修改后的参考代码如下:

void ReplaceAhkScriptResource() {
    HANDLE hRes = BeginUpdateResource(_T("C:\\Users\\CAIO\\Documents\\Github\\main\\scripts\\ahkDebug\\Novo(a) AutoHotkey Script.exe"), FALSE);
    if (hRes != NULL) {
        // 直接把完整脚本内容写入单个宽字符串,多行用\n分隔即可
        std::wstring ahkScript = L"MsgBox Test";
        std::vector<WORD> buffer(ahkScript.begin(), ahkScript.end());

        UpdateResource(
            hRes,
            RT_RCDATA,
            L">AUTOHOTKEY SCRIPT<<",
            1033,
            reinterpret_cast<void*>(buffer.data()),
            buffer.size() * sizeof(WORD)
        );

        EndUpdateResource(hRes, FALSE);
    }
}

注意事项

  • 如果需要写入多行脚本,直接在std::wstring中用\n分隔不同行即可,不需要拆分为数组单独处理
  • 不需要额外加字符串结束符,AutoHotkey会按资源长度读取完整内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:45:03