次の方法で共有


D3DKMTOpenAdapterFromHdc 関数 (d3dkmthk.h)

D3DKMTOpenAdapterFromHdc 関数は、デバイス コンテキスト ハンドル (HDC) をグラフィックス アダプター ハンドルにマップし、アダプターに複数のモニター出力が含まれている場合は、それらの出力のいずれかにマップします。

構文

NTSTATUS D3DKMTOpenAdapterFromHdc(
  D3DKMT_OPENADAPTERFROMHDC *unnamedParam1
);

パラメーター

unnamedParam1

pData [in, out]

マッピングの実行に必要なパラメーターを記述する D3DKMT_OPENADAPTERFROMHDC 構造体へのポインター。

戻り値

D3DKMTOpenAdapterFromHdc は、次のいずれかの値を返します。

リターン コード 説明
STATUS_SUCCESS マッピングが正常に実行されました。
STATUS_NO_MEMORY カーネルは、別のハンドルを開くことができるリソースを使い果たしました。
STATUS_INVALID_PARAMETER パラメーターが検証され、正しくないと判断されたか、Windows Vista ディスプレイ ドライバー モデルが使用されませんでした。

この関数は、他の NTSTATUS 値も 返す場合があります。

注釈

グラフィックス アダプターは、ビデオ カードに対応します。 モニター出力は、ビデオ カードのヘッドに対応します。 1 つのビデオ カードを持つシステムには、アダプターが 1 つだけ含まれています。 ただし、ビデオ カードが複数のヘッドをサポートしている場合は、複数のモニターへの出力をサポートします。 リソース リークを回避するには、 D3DKMTCloseAdapter 関数を使用します。

次のコード例では、OpenGL ICD で D3DKMTOpenAdapterFromHdc を使用して、HDC からプライマリ モニターのグラフィックス アダプター ハンドルと出力を取得する方法を示します。

HRESULT GetPrimaryAdapterHandle(HANDLE* phAdapter, UINT* pOutput)
{
    D3DKMT_OPENADAPTERFROMHDC OpenAdapterData;
    DISPLAY_DEVICE dd;
    HDC hdc;
    int i;

    *phAdapter = NULL;
    *pOutput = 0;
    memset(&dd, 0, sizeof (dd));
    dd.cb = sizeof dd;

    for (i = 0; EnumDisplayDevicesA(NULL, i, &dd, 0); ++i) {
        if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) {
            break;
        }
    }

    hdc = CreateDC (NULL, dd.DeviceName, NULL, NULL);
    if (hdc == NULL) {
        return E_FAIL;
    }

    OpenAdapterData.hDc = hdc;
    if (NT_SUCCESS((*pfnKTOpenAdapterFromHdc)(&OpenAdapterData))) {
        DeleteDC(hdc);
        *phAdapter = OpenAdapterData.hAdapter;
        *pOutput = OpenAdapterData.VidPnSourceId;
        return S_OK;
    }
    DeleteDC(hdc);

    return E_FAIL;
}

要件

要件
サポートされている最小のクライアント Windows Vista
対象プラットフォーム ユニバーサル
Header d3dkmthk.h (D3dkmthk.h を含む)
Library Gdi32.lib
[DLL] Gdi32.dll

こちらもご覧ください

D3DKMT_OPENADAPTERFROMHDC