Обновить рабочий стол (F5) через cmd
Цитата: Имир от 30.10.2025, 09:36Доброе утро! Подскажите, пожалуйста, существует ли способ через
cmdобновить рабочий стол по принципу кнопкиF5?
Доброе утро! Подскажите, пожалуйста, существует ли способ через Скопированоcmd обновить рабочий стол по принципу кнопки СкопированоF5?
Цитата: Vlado от 30.10.2025, 14:14Имир, Доброго.
Так, например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)"
Имир, Доброго.
Так, например
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)"
Цитата: Имир от 30.10.2025, 16:15Vlado, спасибо! При использовании этой команды не происходит изменений отображения скрытых системных файлов. Судя по всему, эта команда не эквивалентна пункту контекстного меню Обновить
Vlado, спасибо! При использовании этой команды не происходит изменений отображения скрытых системных файлов. Судя по всему, эта команда не эквивалентна пункту контекстного меню Обновить
Цитата: Mikhail от 30.10.2025, 16:35Имир, Привет.
А так:ie4uinit.exe -show & ie4uinit.exe -ClearIconCache
Имир, Привет.
А так: Скопированоie4uinit.exe -show & ie4uinit.exe -ClearIconCache
Цитата: Имир от 30.10.2025, 16:37Vlado, скажите, пожалуйста, кнопка
F5и пункт контекстного меню Обновить абсолютно равнозначны по функционалу? И ещё хотел узнать, какие функции заложены в этот пункт? К сожалению, в сети практически ничего не нашёл на эту тему.
Vlado, скажите, пожалуйста, кнопка СкопированоF5 и пункт контекстного меню Обновить абсолютно равнозначны по функционалу? И ещё хотел узнать, какие функции заложены в этот пункт? К сожалению, в сети практически ничего не нашёл на эту тему.
Цитата: Имир от 30.10.2025, 16:42Mikhail, спасибо! Эту команду я уже пробовал, находил здесь на форуме, к сожалению, она также не является эквивалентом пункта Обновить((
Mikhail, спасибо! Эту команду я уже пробовал, находил здесь на форуме, к сожалению, она также не является эквивалентом пункта Обновить((
Цитата: Mikhail от 30.10.2025, 16:46Имир, Ну, эта команда максимально близкая к тому что делает F5 и Кнопка обновить, они одинаково работают и вызывают id refresh, один из обработчиков explorer
Имир, Ну, эта команда максимально близкая к тому что делает F5 и Кнопка обновить, они одинаково работают и вызывают id refresh, один из обработчиков explorer
Цитата: Имир от 30.10.2025, 17:37Mikhail, очевидно, это лишь часть функционала пункта Обновить (F5). Должна быть ещё как минимум одна команда, отвечающая за изменение отображения скрытых системных файлов.
Mikhail, очевидно, это лишь часть функционала пункта Обновить (F5). Должна быть ещё как минимум одна команда, отвечающая за изменение отображения скрытых системных файлов.
Цитата: Имир от 30.10.2025, 17:48Mikhail, например, если внести изменения в разделе
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advancedв параметреShowSuperHidden, то изменения на рабочем столе не отобразятся, пока не нажатьF5(Обновить). Командаie4uinit.exe -show & ie4uinit.exe -ClearIconCacheтут не поможет
Mikhail, например, если внести изменения в разделе СкопированоHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced в параметре СкопированоShowSuperHidden, то изменения на рабочем столе не отобразятся, пока не нажать СкопированоF5 (Обновить). Команда Скопированоie4uinit.exe -show & ie4uinit.exe -ClearIconCache тут не поможет
Цитата: 𝐓𝐇𝐎𝐑𝐭𝐢𝐤 от 30.10.2025, 18:17Цитата: Имир от 30.10.2025, 16:37Vlado, скажите, пожалуйста, кнопка
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!Второй метод считается более надежным, хотя я проверял у себя на рабочем столе, но ничего не заметил... батником хотя бы моргнули значки. ¯\_(ツ)_/¯
Ну пробуй, тестируй...
Цитата: Имир от 30.10.2025, 16:37Vlado, скажите, пожалуйста, кнопка
Скопировано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!
Второй метод считается более надежным, хотя я проверял у себя на рабочем столе, но ничего не заметил... батником хотя бы моргнули значки. ¯\_(ツ)_/¯
Ну пробуй, тестируй...
Цитата: Имир от 30.10.2025, 19:08𝐓𝐇𝐎𝐑𝐭𝐢𝐤, спасибо! Второй метод действительно сработал! Но, к сожалению, только в открытом проводнике(( С рабочим столом по-прежнему не работает. Эмуляция клавиш по ряду причин не приемлема, например, клавиша
F5может быть переназначена
𝐓𝐇𝐎𝐑𝐭𝐢𝐤, спасибо! Второй метод действительно сработал! Но, к сожалению, только в открытом проводнике(( С рабочим столом по-прежнему не работает. Эмуляция клавиш по ряду причин не приемлема, например, клавиша СкопированоF5 может быть переназначена
Цитата: 𝐓𝐇𝐎𝐑𝐭𝐢𝐤 от 30.10.2025, 20:11Цитата: Имир от 30.10.2025, 19:43𝐓𝐇𝐎𝐑𝐭𝐢𝐤, возможно, нужно применить эту команду к окну
Program Manager? Но как это сделать?Что за менеджер, что ты под ним подразумеваешь? Progman.exe? Это оболочка (рабочий стол) старых ОС, в 10-ке ее роль выполняет Проводник (Explorer.exe).
У меня есть еще пару идей, но нужно потестировать на рабочем столе, когда скачанного файла не видно, а то я что-то сделал, что они теперь сразу отображаются и обновление рабочего стола не требуется).😅
Цитата: Имир от 30.10.2025, 19:43𝐓𝐇𝐎𝐑𝐭𝐢𝐤, возможно, нужно применить эту команду к окну
СкопированоProgram Manager? Но как это сделать?
Что за менеджер, что ты под ним подразумеваешь? Progman.exe? Это оболочка (рабочий стол) старых ОС, в 10-ке ее роль выполняет Проводник (Explorer.exe).
У меня есть еще пару идей, но нужно потестировать на рабочем столе, когда скачанного файла не видно, а то я что-то сделал, что они теперь сразу отображаются и обновление рабочего стола не требуется).😅
Цитата: 𝐓𝐇𝐎𝐑𝐭𝐢𝐤 от 31.10.2025, 04:28Имир, в общем, перепробовал несколько методов (псевдообновление обоев, скрытый перезапуск процесса проводника, скрытое создание и удаление временного файла), остановился на этом:
[spoiler title=""]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[/spoiler]
Этот скрипт использует функцию Windows API (SHChangeNotify), которая является стандартным способом уведомления системы об изменении в оболочке, включая Рабочий стол. Этот метод отличается от обновления с помощью F5 или пункта меню "Обновить". Хотя все три действия приводят к перерисовке Рабочего стола, они используют разные механизмы на системном уровне.F5 и "Обновить" - явный запрос пользователя на перерисовку, обновляется, в основном, только визуальное представление значков.
Метод "SHChangeNotify" - низкоуровневый программный вызов, который отправляет сообщение всей Windows Shell. Это более глубокий сброс.Если метод сработает и понадобится добавить в контекстное меню мыши - сохрани код в файл
.ps1, закинь в папку со скриптами (у меня это C:\Scripts\). Потом создай .reg файл для добавления в меню (изменив путь на свой):
[spoiler title=""]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\""[/spoiler]
Имир, в общем, перепробовал несколько методов (псевдообновление обоев, скрытый перезапуск процесса проводника, скрытое создание и удаление временного файла), остановился на этом:
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\""