ChangeDisplaySettingsExA 函式 (winuser.h)
ChangeDisplaySettingsEx 函式會將指定顯示裝置的設定變更為指定的圖形模式。
語法
LONG ChangeDisplaySettingsExA(
[in] LPCSTR lpszDeviceName,
[in] DEVMODEA *lpDevMode,
HWND hwnd,
[in] DWORD dwflags,
[in] LPVOID lParam
);
參數
[in] lpszDeviceName
Null 終止字串的指標,指定圖形模式將變更的顯示裝置。 只有 EnumDisplayDevices 傳回的裝置名稱才有效。 如需與這些顯示裝置相關聯的名稱詳細資訊,請參閱 EnumDisplayDevices。
lpszDeviceName 參數可以 NULL。 NULL 值會指定預設顯示裝置。 您可以呼叫 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
指出圖形模式應該如何變更。 此參數可以是下列其中一個值。
價值 | 意義 |
---|---|
|
目前畫面的圖形模式將會動態變更。 |
|
模式本質上是暫時的。
如果您從另一個桌面變更為 和 ,將不會重設此模式。 |
|
這些設定將會儲存在全域設定區域中,以便影響計算機上的所有使用者。 否則,只會修改用戶的設定。 只有在使用 CDS_UPDATEREGISTRY 旗標指定時,這個旗標才有效。 |
|
這些設定將會儲存在登錄中,但不會生效。 只有在使用 CDS_UPDATEREGISTRY 旗標指定時,這個旗標才有效。 |
|
即使要求的設定與目前的設定相同,也應該變更設定。 |
|
此裝置將成為主要裝置。 |
|
系統會測試是否可設定要求的圖形模式。 |
|
目前畫面的圖形模式將會動態變更,而圖形模式將會在登錄中更新。 模式資訊會儲存在使用者配置檔中。 |
|
設定時,lParam 參數是 VIDEOPARAMETERS 結構的指標。 |
|
啟用不安全圖形模式的設定變更。 |
|
停用不安全圖形模式的設定變更。 |
指定CDS_TEST可讓應用程式判斷哪些圖形模式實際上有效,而不會造成系統變更。
如果指定了CDS_UPDATEREGISTRY,而且可以動態變更圖形模式,則會將資訊儲存在登錄中,並傳回DISP_CHANGE_SUCCESSFUL。 如果無法動態變更圖形模式,則會將資訊儲存在登錄中,並傳回DISP_CHANGE_RESTART。
如果指定了CDS_UPDATEREGISTRY,而且無法將資訊儲存在登錄中,圖形模式就不會變更,而且會傳回DISP_CHANGE_NOTUPDATED。
[in] lParam
如果 dwFlags 為 CDS_VIDEOPARAMETERS,lParam 是 VIDEOPARAMETERS 結構的指標。 否則,lParam 必須 NULL。
傳回值
ChangeDisplaySettingsEx 函式會傳回下列其中一個值。
傳回碼 | 描述 |
---|---|
|
設定變更成功。 |
|
設定變更失敗,因為系統具備 DualView 功能。 |
|
傳入無效的旗標集。 |
|
不支援圖形模式。 |
|
傳入無效的參數。 這可以包含無效的旗標或旗標組合。 |
|
顯示驅動程式失敗指定的圖形模式。 |
|
無法將設定寫入登錄。 |
|
計算機必須重新啟動,圖形模式才能運作。 |
言論
若要確保傳遞至 ChangeDisplaySettingsEx 的 DEVMODE 結構有效,且只包含顯示驅動程式所支援的值,請使用 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 中引進) |