setDisplayConfig 函式 (winuser.h)

SetDisplayConfig函式會藉由在目前會話中獨佔啟用指定的路徑,來修改顯示拓撲、來源和目標模式。

語法

LONG SetDisplayConfig(
  [in]           UINT32                  numPathArrayElements,
  [in, optional] DISPLAYCONFIG_PATH_INFO *pathArray,
  [in]           UINT32                  numModeInfoArrayElements,
  [in, optional] DISPLAYCONFIG_MODE_INFO *modeInfoArray,
  [in]           UINT32                  flags
);

參數

[in] numPathArrayElements

pathArray中的專案數目。

[in, optional] pathArray

要設定之所有顯示路徑的陣列。 只會設定在此陣列中設定DISPLAYCONFIG_PATH_ACTIVE旗標成員DISPLAYCONFIG_PATH_INFO的路徑。 此參數可以是 Null。 此陣列中作用中路徑出現的順序會決定路徑優先順序。 如需路徑優先順序的詳細資訊,請參閱 路徑優先順序順序

[in] numModeInfoArrayElements

modeInfoArray中的專案數目。

[in, optional] modeInfoArray

顯示來源和目標模式資訊的陣列 (DISPLAYCONFIG_MODE_INFO) ,DISPLAYCONFIG_PATH_SOURCE_INFO的 modeInfoIdx 成員所參考,以及 pathArray路徑資訊DISPLAYCONFIG_PATH_TARGET_INFO元素所參考。 此參數可以是 Null

[in] flags

旗標值的位 OR,表示這個函式的行為。 此參數可以是下列其中一個值,或下列值的組合;0 無效。 如需有效旗標組合的描述,請參閱下方。

意義
SDC_APPLY
0x00000080
已設定產生的拓撲、來源和目標模式。
SDC_NO_OPTIMIZATION
0x00000100
SDC_APPLY旗標的修飾詞。 這會導致變更模式一直強制關閉至每個使用中顯示器的驅動程式。
SDC_USE_SUPPLIED_DISPLAY_CONFIG
0x00000020
會使用 pathArraymodeInfoArray 參數中提供的拓撲、來源和目標模式資訊,而不是查閱資料庫中的組態。
SDC_SAVE_TO_DATABASE
0x00000200
產生的拓撲、來源和目標模式會儲存至資料庫。
SDC_VALIDATE
0x00000040
系統會測試要求的拓撲、來源和目標模式資訊,以判斷是否可以設定。
SDC_ALLOW_CHANGES
0x00000400
如有必要,函式可以修改指定的來源和目標模式資訊,以建立功能顯示路徑集。
SDC_TOPOLOGY_CLONE
0x00000002
呼叫端會向持續性資料庫要求最後一個複製組態。
SDC_TOPOLOGY_EXTEND
0x00000004
呼叫端會向持續性資料庫要求最後一個擴充組態。
SDC_TOPOLOGY_INTERNAL
0x00000001
呼叫端會向持續性資料庫要求最後一個內部組態。
SDC_TOPOLOGY_EXTERNAL
0x00000008
呼叫端會向持續性資料庫要求最後一個外部組態。
SDC_TOPOLOGY_SUPPLIED
0x00000010
呼叫端會提供路徑資料,因此函式只會查詢持續性資料庫來尋找及使用來源和目標模式。
SDC_USE_DATABASE_CURRENT
(SDC_TOPOLOGY_INTERNAL |SDC_TOPOLOGY_CLONE |SDC_TOPOLOGY_EXTEND |SDC_TOPOLOGY_EXTERNAL)
呼叫端會要求所有四個SDC_TOPOLOGY_XXX組態的組合。 這個值會通知 API,以設定目前連線監視器的最後一個已知顯示設定。
SDC_PATH_PERSIST_IF_REQUIRED
0x00000800
當函式處理SDC_TOPOLOGY_XXX要求時,它可以在必要時強制目標上的路徑持續性來滿足要求。 如需此旗標可結合之其他旗標的相關資訊,請參閱下列清單。
SDC_FORCE_MODE_ENUMERATION
0x00001000
呼叫端會要求驅動程式有機會在 SetDisplayConfig 設定新的顯示組態時更新 GDI 模式清單。 只有在同時指定SDC_USE_SUPPLIED_DISPLAY_CONFIG和SDC_APPLY旗標值時,這個旗標值才有效。
SDC_ALLOW_PATH_ORDER_CHANGES
0x00002000
SDC_TOPOLOGY_SUPPLIED旗標的修飾詞,指出 SetDisplayConfig 應該在搜尋資料庫時忽略所提供拓撲的路徑順序。 設定此旗標時,拓撲集是包含所有路徑的最新拓撲,不論路徑順序為何。
SDC_VIRTUAL_MODE_AWARE
0x00008000
呼叫端知道虛擬模式之SDC_USE_SUPPLIED_DISPLAY_CONFIG和SDC_TOPOLOGY_SUPPLIED旗標的修飾詞。 從 Windows 10 開始支援。
SDC_VIRTUAL_REFRESH_RATE_AWARE
0x00020000
呼叫端知道虛擬重新整理率的SDC_USE_SUPPLIED_DISPLAY_CONFIG和SDC_TOPOLOGY_SUPPLIED旗標修飾詞。 從 Windows 11 開始支援。

下列清單包含 Flags 參數的有效值組合:

  • 必須設定SDC_APPLY或SDC_VALIDATE,但不能同時設定兩者。
  • 必須設定SDC_USE_SUPPLIED_DISPLAY_CONFIG或任何SDC_TOPOLOGY_XXX組合。 SDC_USE_SUPPLIED_DISPLAY_CONFIG無法使用任何SDC_TOPOLOGY_XXX旗標來設定。
  • SDC_NO_OPTIMIZATION只能設定SDC_APPLY。
  • 允許使用任何其他有效組合SDC_ALLOW_CHANGES。
  • SDC_SAVE_TO_DATABASE只能設定SDC_USE_SUPPLIED_DISPLAY_CONFIG。
  • SDC_PATH_PERSIST_IF_REQUIRED無法與SDC_USE_SUPPLIED_DISPLAY_CONFIG或SDC_TOPOLOGY_SUPPLIED搭配使用。
  • 只有在指定SDC_APPLY和SDC_USE_SUPPLIED_DISPLAY_CONFIG時,SDC_FORCE_MODE_ENUMERATION才有效。
  • 只有在指定SDC_TOPOLOGY_SUPPLIED時,才允許SDC_ALLOW_PATH_ORDER_CHANGES。
  • SDC_TOPOLOGY_SUPPLIED不能與任何其他SDC_TOPOLOGY_XXX旗標搭配使用。 由於驗證問題,如果呼叫端違反此規則, SetDisplayConfig 就不會失敗。 不過, SetDisplayConfig 會忽略SDC_TOPOLOGY_SUPPLIED旗標。
SDC_TOPOLOGY_XXX旗標可用於組合。 例如,如果已設定SDC_TOPOLOGY_CLONE和SDC_TOPOLOGY_EXTEND,API 會使用最新的複製或擴充拓撲,而每個拓撲都是針對目前連線的監視器最近設定的。

傳回值

函式會傳回下列其中一個傳回碼。

傳回碼 描述
ERROR_SUCCESS
此函數已成功。
ERROR_INVALID_PARAMETER
指定的參數和旗標組合無效。
ERROR_NOT_SUPPORTED
系統未執行根據 Windows 顯示驅動程式模型所撰寫的圖形驅動程式 , (WDDM) 。 只有在執行 WDDM 驅動程式的系統上才支援函式。
ERROR_ACCESS_DENIED
呼叫端無法存取主控台會話。 如果呼叫進程無法存取目前的桌面或在遠端會話上執行,就會發生此錯誤。
ERROR_GEN_FAILURE
發生未指定的錯誤。
ERROR_BAD_CONFIGURATION
函式找不到呼叫端未指定之來源和目標模式的可運作解決方案。

備註

SetDisplayConfig函式會採用具有任何指定來源和目標模式資訊的作用中顯示路徑,並使用最佳模式邏輯來產生任何遺漏的來源和目標模式資訊。 此函式接著會設定完整的顯示路徑。

DISPLAYCONFIG_PATH_SOURCE_INFODISPLAYCONFIG_PATH_TARGET_INFO結構中的ModeInfoIdx成員是用來指出是否為指定的使用中路徑提供來源和目標模式。 如果其中一個索引值DISPLAYCONFIG_PATH_MODE_IDX_INVALID,這表示未指定模式資訊。 它適用于路徑加上來源模式,或路徑加上指定路徑的來源和目標模式資訊。 不過,如果路徑加上目標模式沒有來源模式,則無效。

每個來源和目標識別碼的來源和目標模式只能出現在 modeInfoArray 陣列中一次。 例如,來源識別碼 S1 的來源模式只能出現在資料表中一次;如果多個路徑參考相同的來源,則必須使用相同的 ModeInfoIdx

預期大部分的呼叫端都使用 QueryDisplayConfig 來取得目前的設定以及其他有效的可能性,然後使用 SetDisplayConfig 來測試和設定設定。

使用中路徑出現在 PathArray 陣列中的順序會決定路徑優先順序。

根據預設, SetDisplayConfig 永遠不會變更任何提供的路徑、來源模式或目標模式資訊。 如果最佳模式邏輯在未變更指定的顯示路徑資訊的情況下找不到解決方案, SetDisplayConfig 會因為ERROR_BAD_CONFIGURATION而失敗。 在此情況下,呼叫端應該指定SDC_ALLOW_CHANGES旗標,讓函式調整一些指定的來源和模式詳細資料,以允許顯示路徑變更成功。

如果指定的或計算來源和目標模式具有相同的維度, SetDisplayConfig 會在設定顯示路徑並將它儲存在資料庫中之前,自動將路徑調整設定為DISPLAYCONFIG_PPR_IDENTITY。 如需 SetDisplayConfig 如何處理縮放的資訊,請參閱 調整桌面映射

當呼叫端指定SDC_USE_SUPPLIED_DISPLAY_CONFIG旗標來設定複製路徑時,如果路徑陣列中有任何來源模式索引無效, SetDisplayConfig 會判斷該來源的所有來源模式索引都無效。 SetDisplayConfig 會使用最佳模式邏輯來判斷來源模式資訊。

除了SDC_TOPOLOGY_SUPPLIED旗標 (,如需SDC_TOPOLOGY_SUPPLIED的詳細資訊,請參閱下列段落) 、SDC_TOPOLOGY_XXX旗標會設定上次顯示路徑設定,包括該拓撲類型的來源和目標模式資訊。 如需有效SDC_TOPOLOGY_XXX旗標組合的詳細資訊,請參閱 Flags 參數描述。 pathArraymodeInfoArray參數必須是Null,且其相關聯的大小必須為零。 例如,如果已設定SDC_TOPOLOGY_CLONE和SDC_TOPOLOGY_EXTEND,此函式會使用最新的複製或擴充顯示路徑組態。 如果要求單一拓撲類型,則會使用該類型的最後一個組態。 如果之前從未設定過該拓撲, SetDisplayConfig 會使用最佳拓撲邏輯來尋找最佳拓撲,然後最佳模式邏輯來尋找要使用的最佳來源和目標模式。 如果已設定拓撲旗標的組合,且其中沒有任何拓撲旗標具有資料庫專案,則會使用下列優先順序。 針對膝上型電腦:複製、擴充、內部和外部;對於桌面而言,優先順序為 extend,然後複製。

呼叫端可以指定SDC_TOPOLOGY_SUPPLIED旗標,指出它只會設定拓撲 (路徑資訊) ,並要求 SetDisplayConfig 取得,然後使用持續性資料庫中的來源和目標模式資訊。 如果呼叫端提供的作用中路徑在持續性資料庫中沒有專案, SetDisplayConfig 就會失敗。 在此情況下,如果呼叫端再次使用相同的路徑資料呼叫 SetDisplayConfig ,但已設定SDC_USE_SUPPLIED_DISPLAY_CONFIG旗標, SetDisplayConfig 會 使用最佳模式邏輯來建立來源和目標模式資訊。 當呼叫端指定SDC_TOPOLOGY_SUPPLIED時,呼叫端必須將 numModeInfoArrayElements 參數設定為零,並將 modeInfoArray 參數設定為 Null;不過,呼叫端必須針對呼叫端所需的路徑資訊設定 pathArraynumPathArrayElements 參數。 呼叫端必須將此路徑資料中的所有來源和目標模式索引標示為無效 (DISPLAYCONFIG_PATH_MODE_IDX_INVALID) 。

下表提供一些常見的案例,其中 會呼叫 SetDisplayConfig 以及呼叫端傳遞至 Flags 參數以達成案例的旗標組合。

案例 旗標組合
測試電腦上是否支援指定的顯示組態 SDC_VALIDATE |SDC_USE_SUPPLIED_DISPLAY_CONFIG
設定指定的顯示組態並儲存至資料庫 SDC_APPLY |SDC_USE_SUPPLIED_DISPLAY_CONFIG |SDC_SAVE_TO_DATABASE
設定暫存顯示組態 (,即不會儲存顯示組態) SDC_APPLY |SDC_USE_SUPPLIED_DISPLAY_CONFIG
測試電腦上是否支援複製 SDC_VALIDATE |SDC_TOPOLOGY_CLONE
設定複寫拓撲 SDC_APPLY |SDC_TOPOLOGY_CLONE
設定複寫拓撲,並在需要滿足要求時允許啟用路徑持續性 SDC_APPLY |SDC_TOPOLOGY_CLONE |SDC_PATH_PERSIST_IF_REQUIRED
從暫存模式返回上次儲存的顯示組態 SDC_APPLY|SDC_USE_DATABASE_CURRENT
只指定路徑資訊,請使用來自資料庫的路徑來源和目標資訊來設定顯示組態,並忽略路徑順序 SDC_APPLY |SDC_TOPOLOGY_SUPPLIED |SDC_ALLOW_PATH_ORDER_CHANGES
 

DPI 虛擬化

此 API 不會參與 DPI 虛擬化。 DEVMODE 結構中的所有大小都是以實體圖元為根據,而且與呼叫內容無關。

規格需求

   
最低支援的用戶端 適用于 Windows 7 和更新版本的 Windows 作業系統。
目標平台 Universal
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-sysparams-ext-l1-1-1 (于 Windows 10 10.0.14393 版)

另請參閱

DISPLAYCONFIG_MODE_INFO

DISPLAYCONFIG_PATH_INFO

DISPLAYCONFIG_PATH_SOURCE_INFO

DISPLAYCONFIG_PATH_TARGET_INFO

QueryDisplayConfig