NM_WindowCaptureAPI - HexagramNM/NM_WindowCaptureVirtualCamera GitHub Wiki

NM_WindowCaptureに含まれるAPI

NM_WindowCapture.dllを読み込むと使用できるAPIをまとめています。

ウィンドウキャプチャを制御する基盤オブジェクト(NM_WindowCaptureオブジェクト)の生成、削除

CreateWindowCaptureObject: 基盤オブジェクトを生成する

受け取ったオブジェクトのポインタは、主に他の関数の引数に渡します。ポインタを渡すことで、そのオブジェクトに対して処理を行います。

文法

C++

NM_WindowCapture *CreateWindowCaptureObject(HWND baseHwnd);

C#

IntPtr CreateWindowCaptureObject(IntPtr baseHwnd);

引数

  • baseHwnd: このオブジェクトに関連付けられるウィンドウのウィンドウハンドル。 指定されたウィンドウはNM_WindowCaptureでピッカーを開く際に、ピッカーに紐づけられます。 通常はNM_WindowCaptureを制御するGUIウィンドウのウィンドウハンドルを渡します。

    C#でWPFのツールを開発している場合、メインウィンドウのクラスで以下のように呼び出すことで、helper.Handleでメインウィンドウのウィンドウハンドルを取得できます。

    var helper = new System.Windows.Interop.WindowInteropHelper(this);
    var captureObj = NM_WindowCapture.CreateWindowCaptureObject(helper.Handle);

返り値

生成されたNM_WindowCaptureオブジェクトのポインタ


DeleteWindowCaptureObject: 基盤オブジェクトを削除する

生成したNM_WindowCaptureオブジェクトを削除します。ツールを閉じるタイミングで呼び出してください。

文法

C++

void DeleteWindowCaptureObject(NM_WindowCapture *windowCaptureObj);

C#

void DeleteWindowCaptureObject(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: 削除するNM_WindowCaptureオブジェクトのポインタ

キャプチャするウィンドウの設定や情報取得

OpenWindowPicker: キャプチャするウィンドウを選択するためのピッカーを起動する

ピッカーを開き、ウィンドウが選択された場合は、キャプチャするウィンドウが切り替えられます。ウィンドウが選択されると即座にキャプチャが開始されます。

文法

C++

void OpenWindowPicker(NM_WindowCapture* windowCaptureObj);

C#

void OpenWindowPicker(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ピッカーを開くNM_WindowCaptureオブジェクトのポインタ

SetTargetWindowForCapture: ウィンドウハンドルから直接キャプチャするウィンドウを指定する

キャプチャしたいウィンドウハンドルを渡すことで、そのウィンドウをキャプチャするように設定されます。ウィンドウが設定されると、即座にキャプチャが開始されます。

文法

C++

void SetTargetWindowForCapture(NM_WindowCapture* windowCaptureObj, HWND hwnd);

C#

void SetTargetWindowForCapture(IntPtr windowCaptureObj, IntPtr hwnd);

引数

  • windowCaptureObj: キャプチャするウィンドウを設定するNM_WindowCaptureオブジェクトのポインタ

  • hwnd: キャプチャするウィンドウのウィンドウハンドル。

    C#でWPFのツールを開発している場合、メインウィンドウのクラスで以下のように呼び出すことで、helper.Handleでメインウィンドウのウィンドウハンドルを取得できます。

    var helper = new System.Windows.Interop.WindowInteropHelper(this);
    var captureObj = NM_WindowCapture.CreateWindowCaptureObject(helper.Handle);

IsCapturing: 現在ウィンドウをキャプチャしているかを判定

文法

C++

bool IsCapturing(IntPtr windowCaptureObj);

C#

bool IsCapturing(NM_WindowCapture* windowCaptureObj);

引数

  • windowCaptureObj: 判定するNM_WindowCaptureオブジェクトのポインタ

返り値

現在ウィンドウをキャプチャしている場合はtrueを返し、そうでない場合はfalseを返します。


GetCaptureWindowWidth: 現在キャプチャしているウィンドウの幅を取得

トリミング前のキャプチャしたウィンドウの幅がピクセル単位で取得されます。

文法

C++

int GetCaptureWindowWidth(NM_WindowCapture* windowCaptureObj);

C#

int GetCaptureWindowWidth(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

現在キャプチャしているウィンドウの幅(ピクセル単位)

ウィンドウをキャプチャしていない場合は初期値である1が返ります。


GetCaptureWindowHeight: 現在キャプチャしているウィンドウの高さを取得

トリミング前のキャプチャしたウィンドウの高さがピクセル単位で取得されます。

文法

C++

int GetCaptureWindowHeight(NM_WindowCapture* windowCaptureObj);

C#

int GetCaptureWindowHeight(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

現在キャプチャしているウィンドウの高さ(ピクセル単位)

ウィンドウをキャプチャしていない場合は初期値である1が返ります。


GetCaptureFPS: 1秒あたりにキャプチャしたフレーム数を取得

文法

C++

float GetCaptureFPS(NM_WindowCapture* windowCaptureObj);

C#

float GetCaptureFPS(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

現在の、1秒あたりにキャプチャしているフレーム数

この値は60フレームキャプチャするたびに再計算されます。


キャプチャウィンドウのトリミングや表示の制御

SwitchReverseCaptureWindow: キャプチャしたウィンドウの左右を反転

文法

C++

void SwitchReverseCaptureWindow(NM_WindowCapture *windowCaptureObj);

C#

void SwitchReverseCaptureWindow(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

SetLeftMargin: ウィンドウをトリミングする際の左端位置を指定

文法

C++

void SetLeftMargin(NM_WindowCapture* windowCaptureObj, int margin);

C#

void SetLeftMargin(IntPtr windowCaptureObj, int margin);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • margin: トリミングする際の左端位置。元ウィンドウの左端からmarginピクセルだけ右に移動した位置がトリミング後の左端になります。負の値を指定したときはmarginが0に設定されます。トリミング後の左端と右端が入れ替わるような状況になる場合は、トリミング後の右端から1ピクセル左の位置に左端が来るように設定されます。


SetRightMargin: ウィンドウをトリミングする際の右端位置を指定

文法

C++

void SetRightMargin(NM_WindowCapture* windowCaptureObj, int margin);

C#

void SetRightMargin(IntPtr windowCaptureObj, int margin);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • margin: トリミングする際の右端位置。元ウィンドウの右端からmarginピクセルだけ左に移動した位置がトリミング後の右端になります。負の値を指定したときはmarginが0に設定されます。トリミング後の左端と右端が入れ替わるような状況になる場合は、トリミング後の左端から1ピクセル右の位置に右端が来るように設定されます。


SetTopMargin: ウィンドウをトリミングする際の上端位置を指定

文法

C++

void SetTopMargin(NM_WindowCapture* windowCaptureObj, int margin);

C#

void SetTopMargin(IntPtr windowCaptureObj, int margin);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • margin: トリミングする際の上端位置。元ウィンドウの上端からmarginピクセルだけ下に移動した位置がトリミング後の上端になります。負の値を指定したときはmarginが0に設定されます。トリミング後の上端と下端が入れ替わるような状況になる場合は、トリミング後の下端から1ピクセル上の位置に上端が来るように設定されます。


SetBottomMargin: ウィンドウをトリミングする際の下端位置を指定

文法

C++

void SetBottomMargin(NM_WindowCapture* windowCaptureObj, int margin);

C#

void SetBottomMargin(IntPtr windowCaptureObj, int margin);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • margin: トリミングする際の下端位置。元ウィンドウの下端からmarginピクセルだけ上に移動した位置がトリミング後の下端になります。負の値を指定したときはmarginが0に設定されます。トリミング後の上端と下端が入れ替わるような状況になる場合は、トリミング後の上端から1ピクセル下の位置に下端が来るように設定されます。


GetLeftMargin: ウィンドウをトリミングする際の左端位置を取得

文法

C++

int GetLeftMargin(NM_WindowCapture* windowCaptureObj);

C#

int GetLeftMargin(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

ウィンドウをトリミングする際の左端位置

元々のウィンドウの左端を基準に、トリミング後の左端が何ピクセル右にあるかが取得されます。


GetRightMargin: ウィンドウをトリミングする際の右端位置を取得

文法

C++

int GetRightMargin(NM_WindowCapture* windowCaptureObj);

C#

int GetRightMargin(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

ウィンドウをトリミングする際の右端位置

元々のウィンドウの右端を基準に、トリミング後の右端が何ピクセル左にあるかが取得されます。


GetTopMargin: ウィンドウをトリミングする際の上端位置を取得

文法

C++

int GetTopMargin(NM_WindowCapture* windowCaptureObj);

C#

int GetTopMargin(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

ウィンドウをトリミングする際の上端位置

元々のウィンドウの上端を基準に、トリミング後の上端が何ピクセル下にあるかが取得されます。


GetBottomMargin: ウィンドウをトリミングする際の下端位置を取得

文法

C++

int GetBottomMargin(NM_WindowCapture* windowCaptureObj);

C#

int GetBottomMargin(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

返り値

ウィンドウをトリミングする際の下端位置

元々のウィンドウの下端を基準に、トリミング後の下端が何ピクセル上にあるかが取得されます。


SetCaptureCursor: マウスカーソルをキャプチャするかを指定

文法

C++

void SetCaptureCursor(NM_WindowCapture* windowCaptureObj, bool isCaptured);

C#

void SetCaptureCursor(IntPtr windowCaptureObj, bool isCaptured);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • isCaptured: trueの場合、マウスカーソルがキャプチャされます。falseの場合、マウスカーソルはキャプチャされません。


仮想カメラの制御

StartVirtualCamera: 仮想カメラや仮想カメラへの映像送信の開始

仮想カメラへの映像送信を開始します。MediaFoundationの仮想カメラ(NM_WCVCam_MF)が使用可能な場合は、その仮想カメラを起動します。

文法

C++

void StartVirtualCamera(NM_WindowCapture* windowCaptureObj);

C#

void StartVirtualCamera(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

StopVirtualCamera: 仮想カメラや仮想カメラへの映像送信の停止

仮想カメラへの映像送信を停止します。MediaFoundationの仮想カメラ(NM_WCVCam_MF)が起動している場合は、その仮想カメラを停止します。

文法

C++

void StopVirtualCamera(NM_WindowCapture* windowCaptureObj);

C#

void StopVirtualCamera(IntPtr windowCaptureObj);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

プレビュー映像の設定や情報取得

プレビュー映像にはトリミング前のキャプチャされたウィンドウが表示されます。NM_WindowCaputureVirtualCameraではトリミング設定の背景映像に利用しています。

SetEnabledCapturePreview: プレビュー映像の有効化 / 無効化

プレビュー映像を使用しない場合は、この関数で無効化することでプレビュー映像に関する処理をスキップできます。

デフォルトではプレビュー映像が無効となっているので、プレビュー映像を使用する場合は有効に設定してください。

文法

C++

void SetEnabledCapturePreview(NM_WindowCapture* windowCaptureObj, bool enabled);

C#

void SetEnabledCapturePreview(IntPtr windowCaptureObj, bool enabled);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • enabled: trueの場合、プレビュー映像が有効になります。falseの場合、プレビュー映像が無効になります。


CopyCapturePreviewToDXGIResource: D3D11リソースにプレビュー映像を描画(コピー)

D3D11リソースにプレビュー映像のデータをコピーすることで、映像を描画します。

WPFDXInteropのプラグインを使用している場合、D3D11Imageクラスのオブジェクトを作成し、そのオブジェクトをWPFのImageのソースに設定してください。D3D11ImageにはOnRenderのイベントがあり、このイベントで渡されるresourcePtrの引数をこのCopyCapturePreviewToDXGIResourceに渡すことで、WPFにもプレビュー映像が描画されます。

文法

C++

void CopyCapturePreviewToDXGIResource(NM_WindowCapture* windowCaptureObj, void* resourcePtr);

C#

void CopyCapturePreviewToDXGIResource(IntPtr windowCaptureObj, IntPtr resourcePtr);

引数

  • windowCaptureObj: ウィンドウをキャプチャしているNM_WindowCaptureオブジェクトのポインタ

  • resourcePtr: プレビュー映像を描画するリソース(ID3D11Resource)へのポインタ


GetCapturePreviewWidth: プレビュー映像の幅を取得

プレビュー映像の幅は、コンパイル時に決まる仮想カメラの映像の幅と同じです。(ソースコードを変更していない場合は1920になります。)

文法

C++

int GetCapturePreviewWidth();

C#

int GetCapturePreviewWidth();

引数

なし

返り値

ピクセル単位のプレビュー映像の幅


GetCapturePreviewHeight: プレビュー映像の高さを取得

プレビュー映像の高さは、コンパイル時に決まる仮想カメラの映像の高さと同じです。(ソースコードを変更していない場合は1080になります。)

文法

C++

int GetCapturePreviewHeight();

C#

int GetCapturePreviewHeight();

引数

なし

返り値

ピクセル単位のプレビュー映像の高さ



戻る

⚠️ **GitHub.com Fallback** ⚠️