Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Скрытие значков и гаджетов рабочего стола программно (http://forum.oszone.net/showthread.php?t=207808)

MegaFlops 29-05-2011 18:35 1684652

Скрытие значков и гаджетов рабочего стола программно
 
Здравствуйте. Меня интересует можно ли как ни будь программно скрывать/отображать значки и гаджеты рабочего стола



т.е. ставить и убирать эти галочки.

volod3000 01-06-2011 15:56 1686481

Скрытие всех значков на Рабочем столе

Cоздайте DWORD-параметр NoDesktop со значением 1 в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
__________________________________________________________________

Вот еще полезная информация

и еще , ветка гаджетов вот : HKEY_CLASSES_ROOT\DesktopBackground\Shell\Gadgets , а дальше нужно экспериментировать .

MegaFlops 01-06-2011 20:38 1686645

Цитата:

Цитата volod3000
Cоздайте DWORD-параметр NoDesktop со значением 1 в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer »

Не пойдет, срабатывает только после перезагрузки системы, а мне нужно без перезагрузки.

Delirium 02-06-2011 01:01 1686795

Цитата:

Цитата MegaFlops
Не пойдет, срабатывает только после перезагрузки системы, а мне нужно без перезагрузки. »

Значит запускай bat файл примерно такого содержания:
Код:

taskkill /F /IM "explorer.exe"
start explorer

произойдет перезапуск оболочки.

MegaFlops 02-06-2011 22:53 1687380

Работает но эффект не такой как мне нужен.
Если скрывать через реестр, то срываются не только значки, но и перестаёт работать рабочий стол (в смысле не работает правый клик, выделение, перетаскивание).
А если скрывать через правый клик --> вид --> отображать значки рабочего стола скрываются только значки, а остальное всё работает.
Как быть а ?

ferget 03-06-2011 01:43 1687473

вот код на C#, скрывает значки

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Text;
using System.ComponentModel;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            DesktopIcons.Hide();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

    public static class DesktopIcons
    {
        #region Declarations
        delegate bool EnumCallback(IntPtr hwnd, IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool EnumWindows(EnumCallback lpEnumFunc, IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr GetWindow(IntPtr hWnd, GWConstants iCmd);

        enum GWConstants : int
        {
            GW_HWNDFIRST,
            GW_HWNDLAST,
            GW_HWNDNEXT,
            GW_HWNDPREV,
            GW_OWNER,
            GW_CHILD,
            GW_MAX
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern int GetClassName(IntPtr hWnd, [Out] StringBuilder buf, int nMaxCount);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool ShowWindow(IntPtr hWnd, int nShow);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool IsWindowVisible(IntPtr hWnd);
       
        #endregion

        static IntPtr hDesktop = IntPtr.Zero;

        #region Methods
        static string GetClassNameFromHWND(IntPtr hWnd)
        {
            StringBuilder sb = new StringBuilder(256);
            int len = GetClassName(hWnd, sb, sb.Capacity);
            if (len > 0)
                return sb.ToString(0, len);

            throw new Win32Exception(Marshal.GetLastWin32Error());
        }

        public static void Show()
        {
            if (hDesktop != IntPtr.Zero && !IsWindowVisible(hDesktop))
                ShowWindow(hDesktop, 5);
            else
                EnumWindows(new EnumCallback(EnumWins), (IntPtr)5);
        }

        public static void Hide()
        {
            if (hDesktop != IntPtr.Zero && IsWindowVisible(hDesktop))
                ShowWindow(hDesktop, 0);
            else
                EnumWindows(new EnumCallback(EnumWins), IntPtr.Zero);
        }

        static bool EnumWins(IntPtr hWnd, IntPtr lParam)
        {
            if (hWnd != IntPtr.Zero)
            {
                IntPtr hDesk = GetWindow(hWnd, GWConstants.GW_CHILD);
                if (hDesk != IntPtr.Zero && GetClassNameFromHWND(hDesk) == "SHELLDLL_DefView")
                {
                    hDesk = GetWindow(hDesk, GWConstants.GW_CHILD);
                    if (hDesk != IntPtr.Zero && GetClassNameFromHWND(hDesk) == "SysListView32")
                    {
                        ShowWindow(hDesk, lParam.ToInt32());
                        hDesktop = hDesk;
                        return false;
                    }
                }
            }
            return true;
        }
        #endregion

    }
}

а чтобы скрыть гаджеты надо убить процесс sidebar.exe, после его запуска гаджеты снова появятся на своих местах

MegaFlops 03-06-2011 15:32 1687824

Цитата:

Цитата ferget
вот код на C#, скрывает значки »

Отлично работает.

Всем кто помогал большое спасибо, вопрос снят.

rectator 19-01-2013 12:02 2070184

А можно ли какой-либо батник или VBScript для этого сделать? Очень надо!

rectator 01-04-2013 21:08 2123896

Помогите!
Скомпилируйте кто-нибудь этот код! Очень надо. Ребёнок замучил иконки эти таскать...

Вот пример на Delphi, как включить / отключить все объекты на Рабочем Столе:

Код:

{Disable:}
EnableWindow(FindWindowEx(FindWindow
('Progman', nil), HWND(0), 'ShellDll_DefView', nil),
FALSE) ;

{Enable:}
EnableWindow( FindWindowEx( FindWindow
('Progman', nil), HWND(0), 'ShellDll_DefView', nil),
TRUE) ;


Сrack 01-04-2013 21:33 2123915

http://rghost.ru/44957498

HTML код:

включить / отключить все объекты на Рабочем Столе
Desktop.exe /d
Desktop.exe /e

Запуск без параметров скрывает иконки, повторный запуск отображает.

rectator 03-04-2013 10:28 2124806

Только хотел обрадоваться - но не работает к сожалению этот файл у меня...

ne-dm 03-04-2013 13:36 2124920

Цитата:

Цитата Сrack
Desktop.exe /d
Desktop.exe /e
Запуск без параметров скрывает иконки, повторный запуск отображает. »

Проверил на XP и Win 7, все работает.
После Desktop.exe /d иконки не активны, их нельзя перетащить.

rectator 03-04-2013 13:43 2124924

А у меня они активны и с ними можно делать всё что угодно - даже от имени администратора запускал - всё бестолку.

ne-dm 03-04-2013 13:53 2124929

rectator, а скрытие работает?

rectator 03-04-2013 13:59 2124931

Нет, не работает. К сожелению.

ne-dm 03-04-2013 14:03 2124934

rectator, Попробуйте с отключенным антивирусом.
Какая ОС ?

rectator 03-04-2013 14:11 2124938

ОС: Windows 7 без SP1

Антивирус отключил - результат тот же.


Время: 10:45.

Время: 10:45.
© OSzone.net 2001-