Oppure

Loading
18/10/12 8:05
Thejuster
Allora ecco cosa ho fatto


 [StructLayout(LayoutKind.Sequential)]
        public struct SECURITY_ATTRIBUTES
        {
            public int nLength;
            public IntPtr lpSecurityDescriptor;
            public int bInheritHandle;
        }

        [DllImport("kernel32.dll")]
        static extern bool CreateDirectory(string lpPathName, SECURITY_ATTRIBUTES lpSecurityAttributes);



[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, 
                        [MarshalAs(UnmanagedType.LPWStr)] string deviceMode,
                        [MarshalAs(UnmanagedType.U4)] int flags, 
                        [MarshalAs(UnmanagedType.U4)] ACCESS_MASK accessMask,
                        [MarshalAs(UnmanagedType.LPStruct)] SECURITY_ATTRIBUTES attributes);


 [DllImport("user32.dll", EntryPoint = "CloseDesktop", CharSet = CharSet.Unicode, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CloseDesktop(IntPtr handle);


  [Flags]
        enum ACCESS_MASK : uint
        {
            DELETE = 0x00010000,
            READ_CONTROL = 0x00020000,
            WRITE_DAC = 0x00040000,
            WRITE_OWNER = 0x00080000,
            SYNCHRONIZE = 0x00100000,

            STANDARD_RIGHTS_REQUIRED = 0x000f0000,

            STANDARD_RIGHTS_READ = 0x00020000,
            STANDARD_RIGHTS_WRITE = 0x00020000,
            STANDARD_RIGHTS_EXECUTE = 0x00020000,

            STANDARD_RIGHTS_ALL = 0x001f0000,

            SPECIFIC_RIGHTS_ALL = 0x0000ffff,

            ACCESS_SYSTEM_SECURITY = 0x01000000,

            MAXIMUM_ALLOWED = 0x02000000,

            GENERIC_READ = 0x80000000,
            GENERIC_WRITE = 0x40000000,
            GENERIC_EXECUTE = 0x20000000,
            GENERIC_ALL = 0x10000000,

            DESKTOP_READOBJECTS = 0x00000001,
            DESKTOP_CREATEWINDOW = 0x00000002,
            DESKTOP_CREATEMENU = 0x00000004,
            DESKTOP_HOOKCONTROL = 0x00000008,
            DESKTOP_JOURNALRECORD = 0x00000010,
            DESKTOP_JOURNALPLAYBACK = 0x00000020,
            DESKTOP_ENUMERATE = 0x00000040,
            DESKTOP_WRITEOBJECTS = 0x00000080,
            DESKTOP_SWITCHDESKTOP = 0x00000100,

            WINSTA_ENUMDESKTOPS = 0x00000001,
            WINSTA_READATTRIBUTES = 0x00000002,
            WINSTA_ACCESSCLIPBOARD = 0x00000004,
            WINSTA_CREATEDESKTOP = 0x00000008,
            WINSTA_WRITEATTRIBUTES = 0x00000010,
            WINSTA_ACCESSGLOBALATOMS = 0x00000020,
            WINSTA_EXITWINDOWS = 0x00000040,
            WINSTA_ENUMERATE = 0x00000100,
            WINSTA_READSCREEN = 0x00000200,

            WINSTA_ALL_ACCESS = 0x0000037f
        }



        private void Form1_Load(object sender, EventArgs e)
        {
            SECURITY_ATTRIBUTES lpSecurityAttributes = new SECURITY_ATTRIBUTES();
            DirectorySecurity security = new DirectorySecurity();
            lpSecurityAttributes.nLength = Marshal.SizeOf(lpSecurityAttributes);
            byte[] src = security.GetSecurityDescriptorBinaryForm();
            IntPtr dest = Marshal.AllocHGlobal(src.Length);
            Marshal.Copy(src, 0, dest, src.Length);
            lpSecurityAttributes.lpSecurityDescriptor = dest;
            string path = @"C:\Test";
            CreateDirectory(path, lpSecurityAttributes);
        }



private void button1_Click(object sender, EventArgs e)
        {
           IntPtr ins = CreateDesktop("prova", null, null, 0, ACCESS_MASK.GENERIC_ALL, null);
        }




Ho un errore proprio durante la dichiarazione dell'api CreateDesktop

public static extern IntPtr CreateDesktop


Errore    1    Accessibilità incoerente: il tipo parametro 'Multiple_Desktop.Form1.ACCESS_MASK' è meno accessibile del metodo 'Multiple_Desktop.Form1.CreateDesktop(string, string, string, int, Multiple_Desktop.Form1.ACCESS_MASK, Multiple_Desktop.Form1.SECURITY_ATTRIBUTES)'    c:\users\melina\documents\visual studio 2010\Projects\Multiple Desktop\Multiple Desktop\Form1.cs    37    37    Multiple Desktop


Mannaggia l'albo dei ciaffi..

Qualche soluzione? :grr:
Ultima modifica effettuata da Thejuster 18/10/12 8:10
mire.forumfree.it/ - Mire Engine
C# UI Designer
18/10/12 9:32
Perché elementi public e private mischiati?

Elimina tutti i public

Modifica l'ultimo parametro della dichiarazione della CreateDesktop in

IntPtr attributes);

e nella chiamata utilizza

IntPtr.Zero
18/10/12 12:55
Thejuster
Oh heheh grande nessuno funziona.

Grazie per il tuoi grandissimi consigli :D

Sono riuscito a farlo funzionare a dovere.
Switchare desktop e ritornare all'originale.

Grazie dell'aiuto nessuno. :k:

Solo che non vedo le icone.

Devo per caso avviare in quel nuovo desktop il processo Explorer?

se come faccio a mantere il mio programma attivo anche sull'altro desktop? 8-|
Ultima modifica effettuata da Thejuster 18/10/12 12:58
mire.forumfree.it/ - Mire Engine
C# UI Designer