タブー編 ~C++側から秀丸のアクティブウィンドウ切り替えはダメ~

概要

Hm.CppInvokeでは難しく、秀丸マクロでは簡単な分野がある。

Hm.CppInvokeなら簡単だが、秀丸マクロでは難しいこと。

秀丸マクロは「時間を跨いだ継続処理」は苦手とします。
例えば、「10分間継続して実行されつづける秀丸マクロ」、などというのは現実的ではありません
その間、秀丸を操作出来なくなってしまうからです。

一方、Hm.CppInvokeはスレッドなどを使うことで「時間を跨いだ処理の継続」を可能とします。
(ただしこの目的では、C++ではなくC#の方がおすすめです)
秀丸を実行している間、ずっと実行されているようなプログラムを制作したとしても
全く問題はありません。

秀丸マクロなら比較的簡単だが、Hm.CppInvokeではこのましくないこと

例えば、以下のようにC#側から別秀丸プロセスを生み出したり、
アクティブウィンドウを切り替えたりする、といのはこのましい行為ではありません。

C++側から別秀丸へのアクティブウィンドウ切り替えをするマクロを発行するのは、このましくないといえます。

  • C++側のソース

    dllmain.cpp
    #include "HmCppInvoke.h"
    
    using namespace Hidemaru;
    using namespace std;
    
    extern "C" __declspec(dllexport) THmNumber test() {
        Hm.funcDllExport();
    
        try {
            auto result = Hm.Macro.doEval(LR"MACRO(
                newfile;
            )MACRO");
    
            if (result.getResult() > 0)
            {
                // 成功
            }
            else
            {
                // 失敗
            }
        }
        catch (exception e) {
            Hm.OutputPane.output(Text::Encoding::utf8_to_utf16(e.what()));
        }
    
        return 1;
    }