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); }
public Desktops GetActiveDesktop() { using (var s = new DesktopHandle(PInvoke.OpenInputDesktop(0, false, ACCESS_MASK.MAXIMUM_ALLOWED))) { return(GetDesktop(s)); } }
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); } }