Refresh Desktop
From NSIS Wiki
Jump to navigationJump to search
Author: PeterSmith (talk, contrib) |
Description
Requires: System plug-in.
Refreshes the desktop window (USER32.DLL). This is required in the Windows 'Vista' operating system (as of the February 2005 'CTP' build). This script works by finding the correct desktop window and then posting a F5 virtual key down&up. The key sequence must use PostMessage; sending keystrokes using SendMessage doesn't work.
This script is presented as a standalone script; you can compile it into a standalone program or embed it into your script. Note that three user-defined variables are used.
The Script
Name RefreshDesktopWindow OutFile RefreshDesktopWindow.exe SilentInstall silent var ProgmanHwnd var ShellHwnd var DesktopHwnd Section "" ; 256=WM_KEYDOWN ; 257=WM_KEYUP ; 116=VK_F5 FindWindow $ProgmanHwnd "Progman" "Program Manager" FindWindow $ShellHwnd "SHELLDLL_DefView" "" $ProgmanHwnd 0 FindWindow $DesktopHwnd "SysListView32" "" $ShellHwnd 0 System::Call "user32.dll::PostMessage(i $DesktopHwnd, i 256, i 116, i 0)" System::Call "user32.dll::PostMessage(i $DesktopHwnd, i 257, i 116, i 0x80000000)" SectionEnd
Here is something much simpler
This refreshes Windows which is just as fast and in essence the same thing as refreshing the desktop (refreshes all windows).
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'