sazr
sazr

Reputation: 25928

ChangeDisplaySettingsEx() always returns DISP_CHANGE_BADPARAM

I am attempting to set the Display Mode of my Monitor using WinAPI C++ functions.

My Problem: Calling ChangeDisplaySettingsEx() always returns DISP_CHANGE_BADPARAM. What am I doing wrong?

I think it may be my devMode.dmDriverExtra value thats causing the error. I've read MSDN and the explaination of devMode.dmDriverExtra is confusing. What is it and how do I find out the Monitors' dmDriverExtra?

Whats causing my code below to always return DISP_CHANGE_BADPARAM?

DEVMODE devMode;
POINTL p                = {0,0};
_tcscpy(devMode.dmDeviceName, _T("\\Device\\00000072")); 
devMode.dmSpecVersion   = DM_SPECVERSION;
devMode.dmDriverVersion = 1;  // How do I determine the driver version?
devMode.dmSize          = sizeof(DEVMODE);
devMode.dmDriverExtra   = 0x5c0000; // 
devMode.dmFields        = DM_POSITION;
devMode.dmPosition      = p;

LONG res = ChangeDisplaySettingsEx(_T("\\Device\\00000072"), &devMode, mainHwnd, 0, NULL);
_tprintf(_T("%s: %d\n\n\n"), _T("\\Device\\00000072"), res); 
// The above printf always prints out "\Device\00000072: -5" (DISP_CHANGE_BADPARAM=-5)

Upvotes: 0

Views: 1275

Answers (1)

HerrJoebob
HerrJoebob

Reputation: 2313

The hwnd parameter is documented to be reserved and must be NULL. Additionally dmDriverExtra is a 16 bit value, so 0x5c0000 doesn't fit.

Upvotes: 1

Related Questions