「hmLJ」の例題 外部プロセスの呼び出し

  • 概要

    秀丸マクロから外部プロセスを呼び出す手段自体は提供されていますが、
    秀丸マクロ自体、分析機能が貧弱であるため、結果の分析に苦労します。
    しかし、Lua程度の文法と基本ライブラリがあれば、結果の取得や分析に苦労することはありません

    また出力結果を文字列として取得するだけではなく、
    プログラムが返す「リターン値やexit値の取得」なども簡単です。

    外部プロセスを呼び出し、結果を文字列で受け取る

    すでに存在する外部のプロセスを呼び出して処理をする、といったシーンは現在もそれなりに存在します。
    特にコンソールコマンドの類はその傾向があることでしょう。

    #L = loaddll( hidemarudir + "\\" + "hmLJ.dll" );
    
    #_ = dllfunc(#L, "SetStrVar", "g_str_command", "dir");
    
    #_ = dllfunc(#L, "DoFile", currentmacrodirectory + "\\outprocess.lua"); // 外部ファイルの実行
    
    $output = dllfuncstr(#L, "GetStrVar", "output"); // 結果を取得
    
    message($output);
    
    freedll( #L );
    endmacro;
    
    

    外部の「.lua」ファイルを用意

    上記マクロと同じディレクトリに、outprocess.luaというファイルを用意しましょう。
    文字コードはcp932(sjis)なので、気をつけてください。

    -- os.shell_execute は対象プログラムの出力文字が返ってくる。
    -- なお、結果の文字列ではなく、外部プロセス側のリターンコードを受け取る場合には、os.executeで実行してください。
    function os.shell_execute(str_command)
        local handle = io.popen(str_command)
        local result = handle:read("*a")
        handle:close()
        return result
    end
    
    output = os.shell_execute(g_str_command)
    hm.debuginfo(output)