예제 #1
0
        private static void GoToDesktop(int n)
        {
            IObjectArray objectArray;

            _manager.GetDesktops(out objectArray);
            if (objectArray == null)
            {
                return;
            }

            int count;

            objectArray.GetCount(out count);
            if (count == 0)
            {
                return;
            }

            object desktop;

            objectArray.GetAt(n, ref Guids.IVirtualDesktop, out desktop);
            if (desktop == null)
            {
                return;
            }

            _manager.SwitchDesktop((IVirtualDesktop)desktop);
        }
        public IEnumerable <Guid> LoadDesktopUuidList()
        {
            var uuids = new List <Guid>();

            try
            {
                var numberOfDesktops = _managerInternal.GetCount();

                IObjectArray desktops;
                _managerInternal.GetDesktops(out desktops);

                for (int i = 0; i < numberOfDesktops; i++)
                {
                    object desktopResult;
                    desktops.GetAt(i, typeof(uIVirtualDesktop).GUID, out desktopResult);

                    uuids.Add(((uIVirtualDesktop)desktopResult).GetId());
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }

            return(uuids);
        }
예제 #3
0
        internal static IVirtualDesktop GetDesktop(int index)
        {   // get desktop with index
            int count = VirtualDesktopManagerInternal.GetCount();

            if (index < 0 || index >= count)
            {
                throw new ArgumentOutOfRangeException("index");
            }
            IObjectArray desktops;

            VirtualDesktopManagerInternal.GetDesktops(out desktops);
            object objdesktop;

            desktops.GetAt(index, typeof(IVirtualDesktop).GUID, out objdesktop);
            Marshal.ReleaseComObject(desktops);
            return((IVirtualDesktop)objdesktop);
        }
예제 #4
0
        private static void UnsafeSetWallpaper(string imagePath)
        {
            Guid         currentDesktopId = manager.GetCurrentDesktop(IntPtr.Zero).GetId();
            IObjectArray objectArray      = manager.GetDesktops(IntPtr.Zero);

            for (uint i = 0u; i < objectArray.GetCount(); i++)
            {
                objectArray.GetAt(i, typeof(IVirtualDesktop).GUID, out object virtualDesktop);
                if ((virtualDesktop as IVirtualDesktop).GetId() != currentDesktopId)
                {
                    manager.SetWallpaperPath((IVirtualDesktop)virtualDesktop, imagePath);
                }
            }
        }
예제 #5
0
        internal static int GetDesktopIndex(IVirtualDesktop desktop)
        {
            int          index    = -1;
            Guid         IdSearch = desktop.GetId();
            IObjectArray desktops;

            VirtualDesktopManagerInternal.GetDesktops(out desktops);
            object objdesktop;

            for (int i = 0; i < VirtualDesktopManagerInternal.GetCount(); i++)
            {
                desktops.GetAt(i, typeof(IVirtualDesktop).GUID, out objdesktop);
                if (IdSearch.CompareTo(((IVirtualDesktop)objdesktop).GetId()) == 0)
                {
                    index = i;
                    break;
                }
            }

            Marshal.ReleaseComObject(desktops);
            return(index);
        }