المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Enabling Secondry Monitor using C#



C# Programming
05-09-2009, 11:30 PM
Hi,

Ive been trying to build a program to automate the steps to enable a secondry monitor and extend my desktop in C#.

Found this article however it was left open.
http://stackoverflow.com/questions/233411/how-do-i-enable-a-second-monitor-in-c/233584[^ (http://stackoverflow.com/questions/233411/how-do-i-enable-a-second-monitor-in-c/233584)]

My current progres is using the code below however it dosent work. It returns a -1 error flag.

Any help would be greatly appreciated.
Thanks
Michael


[DllImport("user32.dll")]
static extern int ChangeDisplaySettingsEx(string lpszDeviceName,
ref DEVMODE lpDevMode, IntPtr hwnd, uint dwflags, IntPtr lParam);


[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE
{
public const int CCHDEVICENAME = 32;
public const int CCHFORMNAME = 32;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;

public short dmOrientation;
public short dmPaperSize;
public short dmPaperLength;
public short dmPaperWidth;

public short dmScale;
public short dmCopies;
public short dmDefaultSource;
public short dmPrintQuality;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel; // Declared wrong in the full framework
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;

public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;

public int dmPositionX; // Using a PointL Struct does not work
public int dmPositionY;

}

public static uint CDS_RESET = 0x40000000;
public const int CDS_UPDATEREGISTRY = 0x01;

public static void Main(string[] args)
{
Console.WriteLine("Hello World!");

// TODO: Implement Functionality Here

DEVMODE dm = new DEVMODE();
dm.dmSize = (short)Marshal.SizeOf(dm);
dm.dmPelsWidth = 1024;
dm.dmPelsHeight = 768;
dm.dmBitsPerPel = 32;
dm.dmDisplayFrequency = 60;
//dm.dmFields = DevModeFields.DM_BITSPERPEL | DevModeFields.DM_PELSWIDTH | DevModeFields.DM_PELSHEIGHT | DevModeFields.DM_DISPLAYFREQUENCY;
int res = ChangeDisplaySettingsEx(@"\\.\DISPLAY2", ref dm, IntPtr.Zero, CDS_UPDATEREGISTRY, IntPtr.Zero);
Console.WriteLine("result = " + res.ToString());

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}