共用方式為


ChangeDisplaySettingsExA 函式 (winuser.h)

ChangeDisplaySettingsEx 函式會將指定顯示裝置的設定變更為指定的圖形模式。

請注意,您設計以 Windows 8 和更新版本為目標的 app 無法再查詢或設定每圖元小於 32 位的顯示模式(bpp):這些作業將會失敗。 這些應用程式具有以 Windows 8 為目標的 相容性指令清單。 Windows 8 仍然支援 8 位和 16 位色彩模式,適用於在沒有 Windows 8 指令清單的情況下建置之傳統型應用程式;Windows 8 會模擬這些模式,但仍以 32 位色彩模式執行。
 

語法

LONG ChangeDisplaySettingsExA(
  [in] LPCSTR   lpszDeviceName,
  [in] DEVMODEA *lpDevMode,
       HWND     hwnd,
  [in] DWORD    dwflags,
  [in] LPVOID   lParam
);

參數

[in] lpszDeviceName

Null 終止字串的指標,指定圖形模式將變更的顯示裝置。 只有 EnumDisplayDevices 傳回的裝置名稱才有效。 如需與這些顯示裝置相關聯的名稱詳細資訊,請參閱 EnumDisplayDevices

lpszDeviceName 參數可以 NULLNULL 值會指定預設顯示裝置。 您可以呼叫 EnumDisplayDevices 並檢查DISPLAY_DEVICE_PRIMARY_DEVICE旗標來判斷預設裝置。

[in] lpDevMode

描述新圖形模式之 DEVMODE 結構的指標。 如果 lpDevModeNULL,則登錄中目前的所有值都會用於顯示設定。 針對 lpDevMode 參數傳遞 NULL,以及 dwFlags 參數的 0,是動態模式變更后最容易回到預設模式的方法。

dmSize 成員必須初始化為 DEVMODE 結構的大小,以位元組為單位。 必須初始化 dmDriverExtra 成員,以指出 DEVMODE 結構之後的私人驅動程式數據位元組數目。 此外,您可以使用下列任何 DEVMODE 結構的成員。

成員 意義
dmBitsPerPel 每個像素的位數
dmPelsWidth 圖元寬度
dmPelsHeight 圖元高度
dmDisplayFlags 模式旗標
dmDisplayFrequency 模式頻率
dmPosition 裝置在多監視器設定中的位置。
 

除了使用上述一或多個 DEVMODE 成員之外,您也必須在 dmFields 成員中設定下列一或多個值,以變更顯示設定。

價值 意義
DM_BITSPERPEL 使用 dmBitsPerPel 值。
DM_PELSWIDTH 使用 dmPelsWidth 值。
DM_PELSHEIGHT 使用 dmPelsHeight 值。
DM_DISPLAYFLAGS 使用 dmDisplayFlags 值。
DM_DISPLAYFREQUENCY 使用 dmDisplayFrequency 值。
DM_POSITION 使用 dmPosition 值。

hwnd

保留;必須 NULL

[in] dwflags

指出圖形模式應該如何變更。 此參數可以是下列其中一個值。

價值 意義
0
目前畫面的圖形模式將會動態變更。
CDS_FULLSCREEN
模式本質上是暫時的。

如果您從另一個桌面變更為 和 ,將不會重設此模式。

CDS_GLOBAL
這些設定將會儲存在全域設定區域中,以便影響計算機上的所有使用者。 否則,只會修改用戶的設定。 只有在使用 CDS_UPDATEREGISTRY 旗標指定時,這個旗標才有效。
CDS_NORESET
這些設定將會儲存在登錄中,但不會生效。 只有在使用 CDS_UPDATEREGISTRY 旗標指定時,這個旗標才有效。
CDS_RESET
即使要求的設定與目前的設定相同,也應該變更設定。
CDS_SET_PRIMARY
此裝置將成為主要裝置。
CDS_TEST
系統會測試是否可設定要求的圖形模式。
CDS_UPDATEREGISTRY
目前畫面的圖形模式將會動態變更,而圖形模式將會在登錄中更新。 模式資訊會儲存在使用者配置檔中。
CDS_VIDEOPARAMETERS
設定時,lParam 參數是 VIDEOPARAMETERS 結構的指標。
CDS_ENABLE_UNSAFE_MODES
啟用不安全圖形模式的設定變更。
CDS_DISABLE_UNSAFE_MODES
停用不安全圖形模式的設定變更。
 

指定CDS_TEST可讓應用程式判斷哪些圖形模式實際上有效,而不會造成系統變更。

如果指定了CDS_UPDATEREGISTRY,而且可以動態變更圖形模式,則會將資訊儲存在登錄中,並傳回DISP_CHANGE_SUCCESSFUL。 如果無法動態變更圖形模式,則會將資訊儲存在登錄中,並傳回DISP_CHANGE_RESTART。

如果指定了CDS_UPDATEREGISTRY,而且無法將資訊儲存在登錄中,圖形模式就不會變更,而且會傳回DISP_CHANGE_NOTUPDATED。

[in] lParam

如果 dwFlagsCDS_VIDEOPARAMETERSlParamVIDEOPARAMETERS 結構的指標。 否則,lParam 必須 NULL

傳回值

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

傳回碼 描述
DISP_CHANGE_SUCCESSFUL
設定變更成功。
DISP_CHANGE_BADDUALVIEW
設定變更失敗,因為系統具備 DualView 功能。
DISP_CHANGE_BADFLAGS
傳入無效的旗標集。
DISP_CHANGE_BADMODE
不支援圖形模式。
DISP_CHANGE_BADPARAM
傳入無效的參數。 這可以包含無效的旗標或旗標組合。
DISP_CHANGE_FAILED
顯示驅動程式失敗指定的圖形模式。
DISP_CHANGE_NOTUPDATED
無法將設定寫入登錄。
DISP_CHANGE_RESTART
計算機必須重新啟動,圖形模式才能運作。

言論

若要確保傳遞至 ChangeDisplaySettingsExDEVMODE 結構有效,且只包含顯示驅動程式所支援的值,請使用 EnumDisplaySettings 函式所傳回的 DEVMODE

以程序設計方式將顯示監視器新增至多監視器系統時,請將 DEVMODE.dmFields 設定為DM_POSITION,併為您要新增的監視器指定位置(在 DEVMODE.dmPosition中),以指定您新增的監視器,該位置與現有監視器至少一個像素的顯示區域相鄰。 若要中斷鏈接監視器,請將 DEVMODE.dmFields 設為 DM_POSITION,但將 DEVMODE.dmPelsWidth並將 DEVMODE.dmPelsHeight 設為零。 如需詳細資訊,請參閱 多個顯示監視器

動態變更顯示模式時,WM_DISPLAYCHANGE 訊息會傳送至所有執行中的應用程式,並具有下列訊息參數。

參數 意義
wParam 每個圖元的新位
LOWORD(lParam) 新的像素寬度
HIWORD(lParam) 新的圖元高度
 

若要同時變更多個顯示器的設定,請先呼叫 ChangeDisplaySettingsEx,讓每個裝置個別更新登錄,而不套用變更。 然後再次呼叫 ChangeDisplaySettingsEx,並搭配 NULL 裝置來套用變更。 例如,若要變更兩個顯示器的設定,請執行下列動作:


ChangeDisplaySettingsEx (lpszDeviceName1, lpDevMode1, NULL, (CDS_UPDATEREGISTRY | CDS_NORESET), NULL);
ChangeDisplaySettingsEx (lpszDeviceName2, lpDevMode2, NULL, (CDS_UPDATEREGISTRY | CDS_NORESET), NULL);
ChangeDisplaySettingsEx (NULL, NULL, NULL, 0, NULL);

DPI 虛擬化

此 API 不會參與 DPI 虛擬化。 指定的輸入一律以實體圖元為單位,且與呼叫內容無關。

注意

winuser.h 標頭會根據 UNICODE 預處理器常數的定義,將 ChangeDisplaySettingsEx 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winuser.h (包括 Windows.h)
連結庫 User32.lib
DLL User32.dll
API 集 ext-ms-win-ntuser-sysparams-ext-l1-1-1 (在 Windows 10 版本 10.0.14393 中引進)

另請參閱

CreateDC

DEVMODE

裝置內容函式

裝置內容概觀

EnumDisplayDevices

EnumDisplaySettings

VIDEOPARAMETERS

WM_DISPLAYCHANGE