Вы должны войти, чтобы создавать сообщения и темы.

Обновить рабочий стол (F5) через cmd

Страница 1 из 2►

Доброе утро! Подскажите, пожалуйста, существует ли способ через Скопированоcmd обновить рабочий стол по принципу кнопки СкопированоF5?

Имир, Доброго.
Так, например

PowerShell "Add-Type -Name R -Namespace W -MemberDefinition '[DllImport(\"shell32.dll\")] public static extern void SHChangeNotify(int e,uint f,IntPtr a,IntPtr b);';[W.R]::SHChangeNotify(0x8000000,0x1000,[IntPtr]::Zero,[IntPtr]::Zero)"

 

 

Лайкнул Имир
Имир

Vlado, спасибо! При использовании этой команды не происходит изменений отображения скрытых системных файлов. Судя по всему, эта команда не эквивалентна пункту контекстного меню Обновить

Имир, Привет.
А так: Скопированоie4uinit.exe -show & ie4uinit.exe -ClearIconCache

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Vlado, скажите, пожалуйста, кнопка СкопированоF5 и пункт контекстного меню Обновить абсолютно равнозначны по функционалу? И ещё хотел узнать, какие функции заложены в этот пункт? К сожалению, в сети практически ничего не нашёл на эту тему.

Mikhail, спасибо! Эту команду я уже пробовал, находил здесь на форуме, к сожалению, она также не является эквивалентом пункта Обновить((

Имир, Ну, эта команда максимально близкая к тому что делает F5 и Кнопка обновить, они одинаково работают и вызывают id refresh, один из обработчиков explorer

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, очевидно, это лишь часть функционала пункта Обновить (F5). Должна быть ещё как минимум одна команда, отвечающая за изменение отображения скрытых системных файлов.

Mikhail, например, если внести изменения в разделе СкопированоHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced в параметре СкопированоShowSuperHidden, то изменения на рабочем столе не отобразятся, пока не нажать СкопированоF5 (Обновить). Команда Скопированоie4uinit.exe -show & ie4uinit.exe -ClearIconCache тут не поможет

Цитата: Имир от 30.10.2025, 16:37

Vlado, скажите, пожалуйста, кнопка СкопированоF5 и пункт контекстного меню Обновить абсолютно равнозначны по функционалу? И ещё хотел узнать, какие функции заложены в этот пункт? К сожалению, в сети практически ничего не нашёл на эту тему.

Привет. Функции F5 и "Обновить" идентичны.

Для эмуляции F5 в PowerShell:
Требует, чтобы окно проводника было активно.
СкопированоAdd-Type -AssemblyName System.Windows.Forms
Скопировано[System.Windows.Forms.SendKeys]::SendWait("{F5}")
Код "нажимает" F5 в том окне, которое сейчас активно.

Для программного обновления без активного окна:
Скопировано$shell = New-Object -ComObject "Shell.Application"
Скопировано$shell.Windows() | ForEach-Object { $_.Refresh() }
Код напрямую обращается к API Windows и принудительно обновляет все окна проводника.

СкопированоSendKeys("{F5}") - Эмулирует нажатие F5.
СкопированоShell.Application - Вызывает системный метод Refresh.

Пример bat-ника:
Скопировано@echo off
Скопированоecho Refreshing active window...
Скопированоpowershell -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SendKeys]::SendWait('{F5}')"
Скопированоecho Done!

Второй метод считается более надежным, хотя я проверял у себя на рабочем столе, но ничего не заметил... батником хотя бы моргнули значки. ¯\_(ツ)_/¯
Ну пробуй, тестируй...

Лайкнул Имир
Имир

𝐓𝐇𝐎𝐑𝐭𝐢𝐤, спасибо! Второй метод действительно сработал! Но, к сожалению, только в открытом проводнике(( С рабочим столом по-прежнему не работает. Эмуляция клавиш по ряду причин не приемлема, например, клавиша СкопированоF5 может быть переназначена

𝐓𝐇𝐎𝐑𝐭𝐢𝐤, возможно, нужно применить эту команду к окну СкопированоProgram Manager? Но как это сделать?

Цитата: Имир от 30.10.2025, 19:43

𝐓𝐇𝐎𝐑𝐭𝐢𝐤, возможно, нужно применить эту команду к окну СкопированоProgram Manager? Но как это сделать?

Что за менеджер, что ты под ним подразумеваешь? Progman.exe? Это оболочка (рабочий стол) старых ОС, в 10-ке ее роль выполняет Проводник (Explorer.exe).
У меня есть еще пару идей, но нужно потестировать на рабочем столе, когда скачанного файла не видно, а то я что-то сделал, что они теперь сразу отображаются и обновление рабочего стола не требуется).😅

Лайкнул Имир
Имир

Имир, в общем, перепробовал несколько методов (псевдообновление обоев, скрытый перезапуск процесса проводника, скрытое создание и удаление временного файла), остановился на этом:

Спойлер

function Update-DesktopGuaranteed {
    Add-Type -TypeDefinition @"
        using System;
        using System.Runtime.InteropServices;

        public class Shell
        {
            [DllImport("shell32.dll")]
            public static extern void SHChangeNotify(
                uint wEventId, 
                uint uFlags, 
                IntPtr dwItem1, 
                IntPtr dwItem2
            );
        }
"@
    [Shell]::SHChangeNotify(0x08000000, 0x0000, [IntPtr]::Zero, [IntPtr]::Zero)
}

Update-DesktopGuaranteed


Этот скрипт использует функцию Windows API (СкопированоSHChangeNotify), которая является стандартным способом уведомления системы об изменении в оболочке, включая Рабочий стол. Этот метод отличается от обновления с помощью F5 или пункта меню "Обновить". Хотя все три действия приводят к перерисовке Рабочего стола, они используют разные механизмы на системном уровне.

F5 и "Обновить" - явный запрос пользователя на перерисовку, обновляется, в основном, только визуальное представление значков.
Метод "SHChangeNotify" - низкоуровневый программный вызов, который отправляет сообщение всей Windows Shell. Это более глубокий сброс.

Если метод сработает и понадобится добавить в контекстное меню мыши - сохрани код в файл Скопировано.ps1, закинь в папку со скриптами (у меня это C:\Scripts\). Потом создай .reg файл для добавления в меню (изменив путь на свой):

Спойлер

Windows Registry Editor Version 5.00

; Создание основного пункта меню
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\UpdateDesktopPS]
"MUIVerb"="Обновить Рабочий стол"
"Position"="Top"

; Создание команды для запуска скрипта
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\UpdateDesktopPS\command]
@="powershell.exe -NoProfile -ExecutionPolicy Bypass -File \"C:\\Scripts\\UpdateDesktop.ps1\""

Лайкнули Сибирь и Имир
СибирьИмир
Страница 1 из 2►