PDA

Показать полную графическую версию : [решено] Скрытие значков и гаджетов рабочего стола программно


MegaFlops
29-05-2011, 18:35
Здравствуйте. Меня интересует можно ли как ни будь программно скрывать/отображать значки и гаджеты рабочего стола

http://s004.radikal.ru/i205/1105/06/29df0ebe238e.png

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

volod3000
01-06-2011, 15:56
Скрытие всех значков на Рабочем столе

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

Вот еще полезная информация (http://digest.subscribe.ru/inet/review/n96840335.html)

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

MegaFlops
01-06-2011, 20:38
Cоздайте DWORD-параметр NoDesktop со значением 1 в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer »
Не пойдет, срабатывает только после перезагрузки системы, а мне нужно без перезагрузки.

Delirium
02-06-2011, 01:01
Не пойдет, срабатывает только после перезагрузки системы, а мне нужно без перезагрузки. »
Значит запускай bat файл примерно такого содержания:
taskkill /F /IM "explorer.exe"
start explorer
произойдет перезапуск оболочки.

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

ferget
03-06-2011, 01:43
вот код на 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
вот код на C#, скрывает значки »
Отлично работает.

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

rectator
19-01-2013, 12:02
А можно ли какой-либо батник или VBScript для этого сделать? Очень надо!

rectator
01-04-2013, 21:08
Помогите!
Скомпилируйте кто-нибудь этот код! Очень надо. Ребёнок замучил иконки эти таскать...

Вот пример на 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
http://rghost.ru/44957498

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

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

rectator
03-04-2013, 10:28
Только хотел обрадоваться - но не работает к сожалению этот файл у меня...

ne-dm
03-04-2013, 13:36
Desktop.exe /d
Desktop.exe /e
Запуск без параметров скрывает иконки, повторный запуск отображает. »
Проверил на XP и Win 7, все работает.
После Desktop.exe /d иконки не активны, их нельзя перетащить.

rectator
03-04-2013, 13:43
А у меня они активны и с ними можно делать всё что угодно - даже от имени администратора запускал - всё бестолку.

ne-dm
03-04-2013, 13:53
rectator, а скрытие работает?

rectator
03-04-2013, 13:59
Нет, не работает. К сожелению.

ne-dm
03-04-2013, 14:03
rectator, Попробуйте с отключенным антивирусом.
Какая ОС ?

rectator
03-04-2013, 14:11
ОС: Windows 7 без SP1

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




© OSzone.net 2001-2012