如何修复 RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True 不是每次都更新
How to fix RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True not updating every time
我看过 this Whosebug 文章,同样的事情也适用于我。为什么 RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True
每次都不起作用?有没有其他方法可以让它工作而不是重复它直到它工作或者是否有某种方法可以对其进行编码以使其工作? .cmd
, .bat
和 .ps1
都可以)或者 best/only 的方法 运行 很多次所以它有效
现在我的解决方案是 运行 多次直到它起作用。有没有其他方法可以在不 运行ning RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True
很多次的情况下刷新桌面墙纸?
来自帮助
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-systemparametersinfow
尽管这是来自 2001 年的文档并且已从当前文档中删除。
Setting pvParam to "" removes the wallpaper. Setting pvParam to VBNULL
reverts to the default wallpaper.
REM ChangeWallpaper.bat
REM Compiles ChangeWallpaper.vb to ChangeWallpaper.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\ChangeWallpaper.vb" /out:"%~dp0\ChangeWallpaper.exe" /target:winexe
pause
;ChangeWallpaper.vb
Imports System.Runtime.InteropServices
Public Module ChangeWallpaper
Public Declare Unicode Function SystemParametersInfoW Lib "user32" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
Public Const SPI_SETDESKWALLPAPER = 20
Public Const SPIF_SENDWININICHANGE = &H2
Public Const SPIF_UPDATEINIFILE = &H1
Public Sub Main()
Dim Ret as Integer
Dim FName As String
Fname = "C:\Windows\Web\Wallpaper\Theme1\img1.jpg"
'This below line which is commented out takes a filename on the command line
'FName = Replace(Command(), """", "")
Ret = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, FName, SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE)
If Ret = 0 Then Msgbox(err.lastdllerror)
End Sub
End Module
代码来自这里https://winsourcecode.blogspot.com/2019/06/changewallpaper.html
更新
这是使用的问题
Declare Function UpdatePerUserSystemParameters Lib "User32.dll" (ByVal i As Long, ByVal b As Boolean) As long
正如您从文章中看到的那样,Rundll32 正在为 j
传递一个 hwnd(可能是 0 表示 Desktop 是父级),并将 RunDll32 的 HInst 作为布尔值传递给 b
,因为这将非零,它将被视为 true。
我看过 this Whosebug 文章,同样的事情也适用于我。为什么 RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True
每次都不起作用?有没有其他方法可以让它工作而不是重复它直到它工作或者是否有某种方法可以对其进行编码以使其工作? .cmd
, .bat
和 .ps1
都可以)或者 best/only 的方法 运行 很多次所以它有效
现在我的解决方案是 运行 多次直到它起作用。有没有其他方法可以在不 运行ning RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True
很多次的情况下刷新桌面墙纸?
来自帮助 https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-systemparametersinfow
尽管这是来自 2001 年的文档并且已从当前文档中删除。
Setting pvParam to "" removes the wallpaper. Setting pvParam to VBNULL reverts to the default wallpaper.
REM ChangeWallpaper.bat
REM Compiles ChangeWallpaper.vb to ChangeWallpaper.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\ChangeWallpaper.vb" /out:"%~dp0\ChangeWallpaper.exe" /target:winexe
pause
;ChangeWallpaper.vb
Imports System.Runtime.InteropServices
Public Module ChangeWallpaper
Public Declare Unicode Function SystemParametersInfoW Lib "user32" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
Public Const SPI_SETDESKWALLPAPER = 20
Public Const SPIF_SENDWININICHANGE = &H2
Public Const SPIF_UPDATEINIFILE = &H1
Public Sub Main()
Dim Ret as Integer
Dim FName As String
Fname = "C:\Windows\Web\Wallpaper\Theme1\img1.jpg"
'This below line which is commented out takes a filename on the command line
'FName = Replace(Command(), """", "")
Ret = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, FName, SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE)
If Ret = 0 Then Msgbox(err.lastdllerror)
End Sub
End Module
代码来自这里https://winsourcecode.blogspot.com/2019/06/changewallpaper.html
更新
这是使用的问题
Declare Function UpdatePerUserSystemParameters Lib "User32.dll" (ByVal i As Long, ByVal b As Boolean) As long
正如您从文章中看到的那样,Rundll32 正在为 j
传递一个 hwnd(可能是 0 表示 Desktop 是父级),并将 RunDll32 的 HInst 作为布尔值传递给 b
,因为这将非零,它将被视为 true。