Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
1

Скрыть ярлыки рабочего стола

20.08.2010, 18:32. Показов 5825. Ответов 26
Метки нет (Все метки)

Можно сделать так чтоб при запуске программы исчезали все ярлыки рабочего стола?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2010, 18:32
Ответы с готовыми решениями:

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

Изменение заставки рабочего стола
сабж, такое возможно?

Свой аналог рабочего стола
Делаю программу аналог рабочего стола.Что-то типа такого,как на скрине,только со своими виджетами и...

Обработка изображения рабочего стола
Всем доброго времени суток. По задаче для начала нам необходимо получить скрин с экрана, после...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
26
681 / 595 / 138
Регистрация: 08.05.2009
Сообщений: 1,098
20.08.2010, 18:39 2
с помощью WinApi
нужно добавить вот это пространство имен
C#
1
System.Runtime.InteropServices
далее импортируются dll-ки

C#
1
2
3
4
5
[DllImport("user32", EntryPoint = "FindWindowExA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern long FindWindowEx(long hWnd1, long hWnd2, string lpsz1, string lpsz2);
 
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern long SetWindowPos(long hWnd, long hWndInsertAfter, long X, long Y, long cx, long cy, long wFlags);
а вот и сам метод который скрывает и показывает иконки

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public bool ShowHideDesktopIcons(bool show)
{
    try
    {
        long winHandle = FindWindowEx(0L, 0L, "Progman", null);
        switch (show)
        {
            case true:
                ShowWindow(winHandle, 0);
                break;
            case false:
                ShowWindow(winHandle, 5);
                break;
        }
        return true;
    }
    catch (Win32Exception ex)
    {
        MessageBox.Show(ex.ToString());
        return false;
    }
    
}
2
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 18:42 3
Использовать ShowWindow и FindWindow.

Добавлено через 1 минуту
О блин, опоздал
Бельфегор, зачем FindWindowEx, можно просто FindWindow. К тому же FindWindow(Ex) возвращает IntPtr, и параметр hWnd тоже дожен быть IntPtr.
1
681 / 595 / 138
Регистрация: 08.05.2009
Сообщений: 1,098
20.08.2010, 18:47 4
Цитата Сообщение от SSTREGG Посмотреть сообщение
Бельфегор, зачем FindWindowEx, можно просто FindWindow.
согласен
0
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 19:45  [ТС] 5
Бьет ошибку!
Ошибка 1 Требуется класс, делегат, перечисление, интерфейс или структура C:\Users\Администратор\Desktop\Калькулятор (кирпичная кладка)\Калькулятор nev\Калькулятор nev\Program.cs 27 13 Калькулятор nev
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 20:38 6
Код в студию.
0
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 20:41  [ТС] 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Forms;
    
 
namespace Калькулятор_nev
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        [DllImport("user32", EntryPoint = "FindWindowExA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern long FindWindowEx(long hWnd1, long hWnd2, string lpsz1, string lpsz2);
 
        [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern long SetWindowPos(long hWnd, long hWndInsertAfter, long X, long Y, long cx, long cy, long wFlags);
        }
    
    public bool ShowHideDesktopIcons(bool show)
{
    try
    {
        long winHandle = FindWindow(0L, 0L, "Progman", null);
        switch (show)
        {
            case true:
                ShowWindow(winHandle, 0);
                break;
            case false:
                ShowWindow(winHandle, 5);
                break;
        }
        return true;
    }
    catch (Win32Exception ex)
    {
        MessageBox.Show(ex.ToString());
        return false;
    }
    
}
}
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 20:50 8
Попробуйте так. На Win7 этот код не работает, на XP по идее должен.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[DllImport("user32.dll",  CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr FindWindow(string lpsz1, string lpsz2);
 
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return:MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nShow);
 
static bool ShowHideDesktopIcons(bool show)
{
    IntPtr hWin = FindWindow("Progman", null);
    if (hWin != IntPtr.Zero)
        return ShowWindow(hWin, show ? 0 : 5);
 
    return false;
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
    ShowHideDesktopIcons(false);
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}
1
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 20:53  [ТС] 9
У меня Win7! а так чтоб на Win7 и XP работало?
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 21:27 10
У меня нет XP чтобы проверить, чуть позже напишу код для Win7.

Добавлено через 16 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
static class Program
{
    #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);
    #endregion
 
    #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());
    }
 
    static void ShowHideDesktopIcons(bool show)
    {
        EnumWindows(new EnumCallback(EnumWins), show ? (IntPtr)5 : 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());
                    return false;
                }
            }
        }
        return true;
    }
    #endregion
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        ShowHideDesktopIcons(false);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
2
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 21:43  [ТС] 11
Супер все работает!!!
Только "Гаджеты" тоже нужно скрыть и при закрытии или сворачивании программы нужен возврат всего!!!
Плиз!!!!
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 22:03 12
Гаджеты скрыть не могу, они как-то косячно скрываются. Через несколько минут выложу код.
1
Вложения
Тип файла: rar WindowsFormsApplication1.rar (38.6 Кб, 53 просмотров)
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 22:08  [ТС] 13
Чтоб отобразить ярлыки комп перегрузил , а ярлыки разбросались в хаотичном порядке, эту проблемку можно как то решить???
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 22:18 14
Не знаю, у меня всё норм. Кстати для того что бы отобразить/скрыть иконки в w7 нажмите правой кнопкой мыши по рабочему столу дальше Вид->Отображать иконки раб. стола.
0
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 22:24  [ТС] 15
Все ОК!!!!
В СИшарпе слабак, если чот надо в строительстве -ОБРАЩАЙСЯ (помогу)!
Еше раз СПАСИБО!!!!
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 22:32 16
Спасибо, обязательно
0
2 / 2 / 0
Регистрация: 28.07.2010
Сообщений: 48
20.08.2010, 22:35  [ТС] 17
Есть еще одна проблемка , нужно все открытые программы спускать в "трей" при запуске!!!!
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
20.08.2010, 23:03 18
В w7 я могу сделать, но ваше окно тоже скроется. Если делать по другому, то там довольно нудно...
0
681 / 595 / 138
Регистрация: 08.05.2009
Сообщений: 1,098
20.08.2010, 23:53 19
Цитата Сообщение от randr.in.ua Посмотреть сообщение
Есть еще одна проблемка , нужно все открытые программы спускать в "трей" при запуске!!!!
в трей или минимизировать???

Добавлено через 3 минуты
вот тут тема есть про сворачивание всех окон
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.08.2010, 00:36 20
Бельфегор, его окно тоже свернется, а этого не надо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2010, 00:36

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Смена обоев рабочего стола
Вопрос вот в чем. Я не силен в Visual Studio. Хочу объединить vbs скрипт и картинку, в один exe...

Как определить hwnd рабочего стола?
Как определить hwnd рабочего стола? Добавлено через 2 часа 22 минуты решено. через спай пробил...

Скриншот рабочего стола удаленной машины.
Только начал изучать С#, прошу вашей помощи. Возможно ли получить скриншот рабочего стола...

Передача скриншота рабочего стола с удаленного ПК по TCP
Доброго дня всем! Пытаюсь написать для себя программу для удаленного доступа к ПК, используя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.