次の方法で共有


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
ターゲット プラットフォーム 万国
ヘッダー d3dkmthk.h (D3dkmthk.h を含む)
ライブラリ Gdi32.lib
DLL Gdi32.dll

関連項目

D3DKMT_OPENADAPTERFROMHDC