Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

DEVMODE (Structures)
 
.
Summary
Contains information about the initialization and environment of a printer or a display device.

C# Definition:

[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;

}

VB Definition:

<StructLayout(LayoutKind.Sequential)> _
Public Structure DEVMODE
     Private Const CCHDEVICENAME As Integer = 32
     Private Const CCHFORMNAME As Integer = 32

     <VBFixedString(CCHDEVICENAME), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCHDEVICENAME)> _
     Dim dmDeviceName As String
     Dim dmSpecVersion As Short
     Dim dmDriverVersion As Short
     Dim dmSize As Short
     Dim dmDriverExtra As Short
     Dim dmFields As Integer

     Dim dmOrientation As Short
     Dim dmPaperSize As Short
     Dim dmPaperLength As Short
     Dim dmPaperWidth As Short

     Dim dmScale As Short
     Dim dmCopies As Short
     Dim dmDefaultSource As Short
     Dim dmPrintQuality As Short
     Dim dmColor As Short    
     Dim dmDuplex As Short
     Dim dmYResolution As Short
     Dim dmTTOption As Short
     Dim dmCollate As Short
     <VBFixedString(CCHFORMNAME), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCHFORMNAME)> _
     Dim dmFormName As String
     Dim dmLogPixels As Short
     Dim dmBitsPerPel As Integer
     Dim dmPelsWidth As Integer
     Dim dmPelsHeight As Integer
     Dim dmDisplayFlags As Integer
     Dim dmDisplayFrequency As Integer

     Dim dmICMMethod As Integer
     Dim dmICMIntent As Integer
     Dim dmMediaType As Integer
     Dim dmDitherType As Integer
     Dim dmReserved1 As Integer
     Dim dmReserved2 As Integer
     Dim dmPanningWidth As Integer
     Dim dmPanningHeight As Integer
End Structure

Notes:

C# add:

using System.Runtime.InteropServices;

Vb.NET add:

Imports System.Runtime.InteropServices

--

I couldn't use that structure to attach secondary monitor properly.

Instead I've used structure from: http://www.microsoft.com/indonesia/msdn/pinvoke.aspx, which works for me fine. I suppose that dmPositionX and dmPositionY should be placed after dmFields.

Tips & Tricks:

Since the DEVMODE members beyond dmDisplayFrequency do not have to be declared, the structure can vary in size. You should set dmSize to effective size of your implemetation before calling API functions:

DEVMODE d = new DEVMODE();
d.dmSize = Marshal.SizeOf(typeof(DEVMODE));

This way the API is informed of the version of DEVMODE used.

If you use Reflector, you can find Microsoft's managed version of the structure.

As of .net 3.5 the DEVMODE structure is declared incorrectly causing incorrect values to be returned after dmBitsPerPel. The C# structure above has been updated to reflect the correct implementation.

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
DEVMODE on MSDN

Please edit this page!

Do you have...

  • helpful tips?
  • corrections to the existing content?
  • alternate definitions?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing any supporting types needed.

 
Access PInvoke.net directly from VS:
Terms of Use
Find References
Show Printable Version
Revisions