createdesktop (user32)
Last changed: -74.116.173.16

.
Summary

C# Signature:

     // ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dllproc/base/createdesktop.htm
    [DllImport("user32.dll", EntryPoint="CreateDesktop", CharSet=CharSet.Unicode, SetLastError=true)]
    public static extern IntPtr CreateDesktop(
                    [MarshalAs(UnmanagedType.LPWStr)] string desktopName,
                    [MarshalAs(UnmanagedType.LPWStr)] string device, // must be null.
                    [MarshalAs(UnmanagedType.LPWStr)] string deviceMode, // must be null,
                    [MarshalAs(UnmanagedType.U4)] int flags,  // use 0
                    [MarshalAs(UnmanagedType.U4)] DESKTOP_ACCESS_MASK accessMask,
                    [MarshalAs(UnmanagedType.LPStruct)] SecurityAttributes attributes);


    // ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dllproc/base/closedesktop.htm
    [DllImport("user32.dll", EntryPoint="CloseDesktop", CharSet =  CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool CloseDesktop(IntPtr handle);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

DesktopClass on dotnet-snippets.de

Sample Code:

public class SafeDesktopHandle : BaseSafeHandle
    {
    public SafeDesktopHandle(IntPtr handle, bool ownsHandle)
        : base(handle, ownsHandle)
    { }

    protected override bool CloseNativeHandle(IntPtr handle)
    {
        return WindowStationAndDesktop.CloseDesktop(handle);
    }
    }
[Flags]
    internal enum DESKTOP_ACCESS_MASK : uint
    {
    DESKTOP_NONE        = 0,
    DESKTOP_READOBJECTS     = 0x0001,
    DESKTOP_CREATEWINDOW    = 0x0002,
    DESKTOP_CREATEMENU      = 0x0004,
    DESKTOP_HOOKCONTROL     = 0x0008,
    DESKTOP_JOURNALRECORD       = 0x0010,
    DESKTOP_JOURNALPLAYBACK     = 0x0020,
    DESKTOP_ENUMERATE       = 0x0040,
    DESKTOP_WRITEOBJECTS    = 0x0080,
    DESKTOP_SWITCHDESKTOP       = 0x0100,

    GENERIC_ALL         = ( DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU |
                    DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK |
                    DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS | DESKTOP_SWITCHDESKTOP |
                    STANDARD_ACCESS.STANDARD_RIGHTS_REQUIRED),
    }


Alternative Managed API:

Do you know one? Please contribute it!

Documentation

DesktopClass on dotnet-snippets.de