動画キャプチャー LoiloGameRecorderMod API

概要

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

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

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

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

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

ダウンロード

更新日 2015/05/22
LoiloGameRecorerMod.zip

ロイロの機能を汎用言語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 への参照を増やしましょう。

      PICTURE

      PICTURE

      PICTURE

    #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);
    
    }