共用方式為


D3DKMTOpenAdapterFromHdc 函式 (d3dkmthk.h)

D3DKMTOpenAdapterFromHdc 函式會將裝置內容句柄 (HDC) 對應至圖形適配卡句柄,如果配接器包含多個監視器輸出,則對應至其中一個輸出。

語法

NTSTATUS D3DKMTOpenAdapterFromHdc(
  D3DKMT_OPENADAPTERFROMHDC *unnamedParam1
);

參數

unnamedParam1

pData [in, out]

D3DKMT_OPENADAPTERFROMHDC 結構的指標,描述執行對應所需的參數。

傳回值

D3DKMTOpenAdapterFromHdc 會傳回下列其中一個值:

傳回碼 Description
STATUS_SUCCESS 已成功執行對應。
STATUS_NO_MEMORY 核心已用盡可讓它開啟另一個句柄的資源。
STATUS_INVALID_PARAMETER 已驗證並判斷參數不正確,或未使用 Windows Vista 顯示驅動程式模型。

此函式也可能傳回其他 NTSTATUS 值。

備註

圖形配接器會對應到視頻卡。 監視器輸出會對應到視頻卡上的前端。 具有單一視訊卡的系統只包含一張適配卡。 不過,如果視訊卡支援多個頭部,它支持輸出到多個監視器。 使用 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
目標平台 Universal
標頭 d3dkmthk.h (包含 D3dkmthk.h)
程式庫 Gdi32.lib
Dll Gdi32.dll

另請參閱

D3DKMT_OPENADAPTERFROMHDC