예제 #1
0
        public bool SwitchDesktop(Desktops dname)
        {
            f.WriteLine("Switch TO" + Enum.GetName(dname.GetType(), dname));
            var desktop = new DesktopHandle(PInvoke.OpenDesktop(Enum.GetName(dname.GetType(), dname), 0, false,
                                                                ACCESS_MASK.DESKTOP_CREATEMENU | ACCESS_MASK.DESKTOP_CREATEWINDOW |
                                                                ACCESS_MASK.DESKTOP_ENUMERATE | ACCESS_MASK.DESKTOP_HOOKCONTROL |
                                                                ACCESS_MASK.DESKTOP_WRITEOBJECTS | ACCESS_MASK.DESKTOP_READOBJECTS |
                                                                ACCESS_MASK.DESKTOP_SWITCHDESKTOP | ACCESS_MASK.GENERIC_WRITE));

            f.WriteLine("Switch Invalid" + desktop.IsInvalid);
            if (desktop.IsInvalid)
            {
                return(false);
            }
            if (!PInvoke.SetThreadDesktop(desktop.Handle))
            {
                f.WriteLine("Switch failed" + Marshal.GetLastWin32Error());
                desktop.Dispose();
                return(false);
            }
            m_hDesk.Dispose();
            m_hDesk         = desktop;
            Current_Desktop = dname;
            f.WriteLine("Switch Success" + dname);
            return(true);
        }
예제 #2
0
 public Desktops GetActiveDesktop()
 {
     using (var s = new DesktopHandle(PInvoke.OpenInputDesktop(0, false, ACCESS_MASK.MAXIMUM_ALLOWED)))
     {
         return(GetDesktop(s));
     }
 }
예제 #3
0
        private Desktops GetDesktop(DesktopHandle s)
        {
            f.WriteLine("Get Desktop Invalid" + s.IsInvalid);
            if (s.IsInvalid)
            {
                return(Desktops.Default);
            }
            int    needed = 0;
            string name   = string.Empty;

            PInvoke.GetUserObjectInformation(s.Handle, PInvoke.UOI_NAME, IntPtr.Zero, 0, ref needed);

            // get the name.
            IntPtr ptr    = Marshal.AllocHGlobal(needed);
            bool   result = PInvoke.GetUserObjectInformation(s.Handle, PInvoke.UOI_NAME, ptr, needed, ref needed);

            f.WriteLine("Get Desktop Result" + result);
            name = Marshal.PtrToStringAnsi(ptr);
            f.WriteLine("Get Desktop Name" + name);
            Marshal.FreeHGlobal(ptr);
            if (!result)
            {
                return(Desktops.Default);
            }
            if (name == "Default")
            {
                return(Desktops.Default);
            }
            else if (name == "Screensaver")
            {
                return(Desktops.ScreenSaver);
            }
            else
            {
                return(Desktops.Winlogon);
            }
        }