動画キャプチャー LoiloGameRecorderMod API

  • 概要

    これは、実はModではなく、Mod製作を支えるAPIです。

    全てを自作するのではなく、外部アプリケーションの「機能だけをScenarioModで利用する」というサンプルとなります。

    このサンプルは天翔記のみならず、一般用途としても利用可能なものです。

    仕組みとしては、ロイロゲームレコーダーのUIは使わず
    録画コアに近いライブラリのDLLだけ利用する、というものとなります。

    ロイロアプリケーションがこのようなAPIを明示的に提供しているわけではありません。
    しかし基本的なプログラム知識があれば、 このように、自分の必要な形へとソフトウェアを再構築することが可能です。

  • ダウンロード

    DOWNLOAD ⇒ LoiloGameRecorerMod APIファイル。
    └更新日 2015/05/22
  • ロイロの機能を汎用言語C++/CLI(C#でも同様)から利用する

    • 一般アプリケーションサンプルとして確認してみる。

      • 下準備やファイルのコピー
        • まず、上記「ロイロゲームレコーダー」本体アプリケーションをPCへとインストールします。
        • 次に「C:\abc」というフォルダをCドライブに作成します。
        • ロイロゲームレコーダー本体である「C:\Program Files\LoiLo\LoiLoGameRecorder」のフォルダの中身を
          (サブフォルダも含め)全て「C:\abc」フォルダにコピーします。
          (C:\abc\LoiloGameRecorder.exe といったファイル位置)

        • LoiloGameRecorderMod.zipを解凍し、LoiloGameRecorderMod.dllとTestProg.exeをC:\abcフォルダにコピーします。
      • 録画の実験
        • 天翔記を起動します。
        • TestProg.exe を実行します。
        • Hello Worldと黒い画面が出ます。
        • 10秒経過すると、黒い画面が閉じられ、C:\abc\test.avi が作られます。
        • サンプルとしての動作確認は以上となります。
      • ソースコード
        • 最低限必要となるプログラム記述は
          LoiloGameRecorder.slnを VisualStudioで起動し、TestProgを確認してください。
          録画開始関数は1行、録画終了関数は1行の簡単構成です。
        #include <windows.h>
        
        using namespace System;
        
        #pragma comment(lib, "user32.lib")
        
        int main(cli::array<System::String ^> ^args)
        {
            Console::WriteLine(L"Hello World");
        
            // ウィンドウハンドルを得る
            HWND hWnd = FindWindow(L"Tenshouki95", NULL);
        
            // 第1引数は本来は、自分自身のウィンドウハンドル(要するに録画プログラム側のウィンドウ)なのであるが、
            // 無い場合は、録画相手のものでも指定しておけば良い
        
            // 第2引数は、録画相手のウィンドウハンドル
        
            // 第3引数は、ムービーファイルのフルパス。
            LoiloGameRecorderMod::StartRecording((IntPtr)hWnd, (IntPtr)hWnd, gcnew String(L"C:\\abc\\test.avi"));
        
        
            Sleep(10000);
        
            // ムービーストップ。
            LoiloGameRecorderMod::StopRecording();
        
            return 0;
        }
        
  • 天翔記のScenarioModに組み込んでみる。

    • 下準備

      • 上記サンプル時と同様に、

        ロイロゲームレコーダー本体である「C:\Program Files\LoiLo\LoiLoGameRecorder」のフォルダの中身を天翔記フォルダにコピーしても出来ますが、
        「削除が面倒」という問題もありますので、必要な分だけ「複製」する「LoiloGameRecorderModCpy.bat」というプログラムを用意しました。

        この「LoiloGameRecorderModCpy.bat」は
        1.ロイロから必要な分だけファイルをコピーする。
        2.逆に複製したファイルを削除する。
        1と2を実行する度に交互に繰り返します。

        • LoiloGameRecorderModCpy.batを天翔記フォルダに配置し、実行します。
        • LoiloGameRecorderMod.dllも天翔記フォルダへと配置します。
    • SceanrioModで使ってみる

      • ScenarioMod内で、LoiloGameRecorderMod.dll への参照を増やしましょう。




      #include "カスタム駆動関数.h"
      
      
      using namespace System;
      // CLIを使うので、このくらいはネームスペースを省略しよう
      
      
      void カスタム::On_終了時() {
      
        // 録画終了
        LoiloGameRecorderMod::StopRecording();
      
      }
      
      void カスタム::On_メインゲーム開始() {
      
        // パラメータを渡す相手がC#クラスなので、C++/CLIのマネージドな記述を中心とする。
      
        // 天翔記のウィンドウハンドル
        System::IntPtr hWndTenshouki = (System::IntPtr)FindWindow("Tenshouki95", NULL);
      
        // 現在実行中のexeが起動したフォルダ。要するに天翔記フォルダ
        String^ cur_dir = System::Windows::Forms::Application::StartupPath;
      
        // 天翔記フォルダに"movie"をくっつけて、適当な名前でムービーファイル名を作成する。
        // ムービーのフルパス。ムービーフォルダの中に入れる。
        String^ file_name = String::Format("Capture_{0:yyyyMMdd_HHmmss}.avi", DateTime::Now);
        String^ movie_name = cur_dir + "\\movie\\" + file_name;
      
        // 録画開始
        LoiloGameRecorderMod::StartRecording( hWndTenshouki, hWndTenshouki, movie_name);
      
      }