Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634

Обновление рабочего стола

26.07.2015, 20:40. Показов 2407. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Встал вопрос после создания/удаления ярлыков на рабочем столе обновить последний.

Все что нашел на форуме, так это пример "по F5" и под NET...
VB.NET
1
2
3
4
5
6
7
Declare Auto Function FindWindow Lib "User32.Dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    Declare Auto Function SetForegroundWindow Lib "User32.Dll" (ByVal hWnd As IntPtr) As Boolean
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Des As IntPtr = FindWindow("Progman", "Program Manager")
        SetForegroundWindow(Des)
        SendKeys.SendWait("{F5}")
    End Sub
Никто не поможет, тоже под VB6?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2015, 20:40
Ответы с готовыми решениями:

Отображение удаленного рабочего стола
Как сделать, так чтобы в picturebox, ну или хоть в чём отображался другой(удалённый) рабочий стол?

Как получить hWnd рабочего стола?
(конкретно окна, где рисуеться фоновое изображение винды)

Как узнать разрешение рабочего стола
Как узнать разрешение рабочего стола?

15
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.07.2015, 22:16
Лучший ответ Сообщение было отмечено kreotodr как решение

Решение

Цитата Сообщение от kreotodr Посмотреть сообщение
так это пример "по F5"
По F5 это ну очень не красивый способ. Есть же цивилизованные метод API SHChangeNotify:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Private Const SHCNE_ASSOCCHANGED As Long = &H8000000
Private Const SHCNF_IDLIST As Long = &H0
 
Private Declare Function SHChangeNotify Lib "Shell32.dll" (ByVal wEventID As Long, _
ByVal uFlags As Long, ByVal dwItem1 As Long, ByVal dwItem2 As Long) As Long
 
Private Sub Command1_Click()
' обновить рабочий стол
Call SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)
 
End Sub
2
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
27.07.2015, 07:10  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
цивилизованные метод API SHChangeNotify
Цитата Сообщение от Pro_grammer Посмотреть сообщение
тод API SHChangeNotify:
Спасибо!
И откуда вы все это знаете....????

Добавлено через 15 минут
Пробовал утром на Win10, не работает...
Может все таки F5 подправите?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.07.2015, 08:47
Цитата Сообщение от kreotodr Посмотреть сообщение
на Win10, не работает
А она уже официально вышла?
Вот код VB6
Visual Basic
1
2
3
4
5
6
7
8
9
10
Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
Private Sub Command1_Click()
Dim Des As Long
Des = FindWindow("Progman", "Program Manager")
SetForegroundWindow (Des)
SendKeys "{F5}"
End Sub
Но тут ещё тоже вопрос именами в W10 "Progman", "Program Manager"...

Добавлено через 28 минут
Маленько погуглил на эту тему ( SHChangeNotify ). Вот что обнаруживается, начиная с Win8. Если в таскбаре выставлен режим "Never Combine" то иконки обновляются, если же выставлено "Always Combine" то нет.
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
27.07.2015, 08:51  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А она уже официально вышла?
Еще нет, но последний Билд 10240 вроде как RТМ. Покрайней мере так говорят и 29/07/15 будет именно он.
Он стабильный стоит у меня уже примерно две недели...Все летает, реально летает...
За код спасибо..
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.07.2015, 13:57

Не по теме:


Цитата Сообщение от kreotodr Посмотреть сообщение
но последний Билд 10240 вроде как RТМ
RTM Escrow, тобишь предрелиз.



Делаю так, т.е. со страховками:

Visual Basic
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
' Обновить кеш иконок
Public Sub RefreshLNK()
    On Error GoTo ErrorHandler
    
    SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_FLUSH, 0&, 0&
    
    Const CLSIDSTR_ActiveDesktop As String = "{75048700-EF1F-11D0-9888-006097DEACF9}"
    
    Dim CLSID_ActiveDesktop As UUID
    Dim IID_IUnknown        As UUID
    Dim oUnknown            As IUnknown
    Dim oActiveDesktop      As IActiveDesktop
    
    CLSIDFromString StrPtr(CLSIDSTR_ActiveDesktop), CLSID_ActiveDesktop
    CLSIDFromString StrPtr(IIDSTR_IUnknown), IID_IUnknown
    
    If S_OK = CoCreateInstance(CLSID_ActiveDesktop, 0&, CLSCTX_INPROC_SERVER, IID_IUnknown, oUnknown) Then
 
        Set oActiveDesktop = oUnknown
        
        oActiveDesktop.ApplyChanges AD_APPLY_ALL
        
        On Error Resume Next
        oActiveDesktop.ApplyChanges AD_APPLY_ALL Or AD_APPLY_FORCE
        
        If Err.Number <> 0 Then
            On Error GoTo ErrorHandler
            'SendF5toDesktop    ' так нельзя. Вызывает нежелательный артифакт: ярлыки накладываются друг на друга.
                                ' Следует вызывать F5 через некоторое время. Вставил код после того, как
                                ' пользователь нажмет ОК в сообщении с результатом лечения.
        End If
    
        Set oActiveDesktop = Nothing
        Set oUnknown = Nothing
    End If
    
    Exit Sub
ErrorHandler:
    AppendErrorLogFormat Now, Err, "Parser.RefreshLNK"
    Resume Next
End Sub
 
Public Sub SendF5toDesktop()
    Const GW_CHILD      As Long = 5&
    Const WM_KEYDOWN    As Long = 256&
    Const VK_F5         As Long = &H74&
    
    Dim hwnd                As Long
    Dim HwndChild           As Long
    
    hwnd = FindWindow("Progman", "Program Manager")
   
    HwndChild = GetWindow(hwnd, GW_CHILD)
    
    If HwndChild Then
        PostMessage HwndChild, WM_KEYDOWN, VK_F5, 1&
    End If
End Sub
Все, что написано в комментариях так и есть, т.к. проверено на практике.
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
27.07.2015, 15:08  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Делаю так, т.е. со страховками:
Спасибо, почти диссертация... По f5 впринципе работает..Но буду использовать Ваш.
Для полной красоты думаю не помешает добавить Err.Clear....

Добавлено через 27 минут
Цитата Сообщение от Dragokas Посмотреть сообщение
RTM Escrow, тобишь предрелиз.
Спорить не буду, но "знающие" говорят, что РТМ уже как такового нет, и что именно 10240 будет релизным..
0
27.07.2015, 20:18

Не по теме:


Цитата Сообщение от kreotodr Посмотреть сообщение
Спорить не буду, но "знающие" говорят, что РТМ уже как такового нет, и что именно 10240 будет релизным..
Они говорят так, потому что партию с предустановленной виндой уже отгрузили,
следовательно дыры будут латать уже на ходу. А значит спешить объявлять о выходе RTM уже незачем. Сроки сгорели. Допилят как нибудь в следующему году, как разгребут миллион багов по формам обратной связи.

0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
27.07.2015, 21:23
Нужно передавать флаг SHCNE_ALLEVENTS и корректный PIDL.
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
27.07.2015, 22:17  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
ой виндой уже отгрузи
По сути да..
Если учесть что будет 4-6 сервис пуков на пртотяжении обещанных 10 лет поддержки...
С NT4 помоему было 6 если не ошибаюсь

Добавлено через 20 секунд
Цитата Сообщение от Dragokas Посмотреть сообщение
ой виндой уже отгрузи
По сути да..
Если учесть что будет 4-6 сервис пуков на пртотяжении обещанных 10 лет поддержки...
С NT4 помоему было 6 если не ошибаюсь
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
18.09.2015, 19:30  [ТС]
Коллеги подскажите как реализовать аналогичную задачу, но не для рабочего стола а для области уведомления (трей) Задача снята, но значек висит и уйдет он только тогда, когда на него навести мышь. Может можено как то "рефрешнуть" ?
Миниатюры
Обновление рабочего стола  
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
18.09.2015, 20:41
Цитата Сообщение от kreotodr Посмотреть сообщение
Задача снята, но значек висит
Если правильно написан код, то этой проблемы нет
В Sub Form_Unload надо прописать что то типа Shell_NotifyIcon(NIM_DELETE, IconData)
Тогда иконка пропадет вместе с завершением программы.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
18.09.2015, 21:00
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Если правильно написан код…
В Win XP значок висит почти у любого приложения (до наведения мыши на уже выключенное).

Pro_grammer, а всё ж любопытно:
Цитата Сообщение от kreotodr Посмотреть сообщение
откуда вы все это знаете…
Я, например, тренировался на «студенческих» и секретарских* и в такие глубины не лез.
________________
* сегодня День секретаря!
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
22.09.2015, 08:55  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
В Sub Form_Unload надо прописать что то типа Shell_NotifyIcon(NIM_DELETE, IconData)

нет примера(ов) на эту тему?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
22.09.2015, 09:22
Цитата Сообщение от kreotodr Посмотреть сообщение
примера(ов) на эту тему
Вот пример, иконка корректно удаляется при выходе из программы или кнопкой при работе программы.
Вложения
Тип файла: zip Sys2.zip (3.1 Кб, 9 просмотров)
2
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
22.09.2015, 20:50  [ТС]
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2015, 20:50
Помогаю со студенческими работами здесь

Код для смены заставки рабочего стола.
Люди, кто напишет мне действуйщий код того, как можно сменить фон рабочего стола, тот получит бесплатно мою прогу Olga v1.0!!!

Смена фонового изображения рабочего стола программно
Для этого я использую API-функцию SystemParametersInfo: Option Explicit Const SPI_SETDESKWALLPAPER = 20 Const...

Как сделать .avi-файл фоном рабочего стола?
Как сделать .avi-файл фоном рабочего стола? Т. е чтобы под иконками, программами и т. д. воспроизводилось изображение?

Как картинку сделать фоновой рабочего стола Windows'а?
Как картинку сделать фоновой рабочего стола Windows''а? Спасибо.

Обновление рабочего стола
Пробовал обновить рабочий стол таким образом: &lt;DllImport(&quot;Shell32.dll&quot;, CharSet:=CharSet.Auto)&gt; _ Private Shared Sub...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru