我正在尝试一个项目,我可以使用opengl/directx或GDI为windows 7壁纸设置动画.我调查了Windows桌面窗口是如何布局的,我想出了整体
"Progman" - >"SHELLDLL_DefView" - >"SysListView32"
层次结构.我尝试连接SysListView32的WndProc,并尝试使用注入的c#dll搞乱消息,这样当我使用控制面板 - >个性化菜单强制更改时,我可以阻止桌面绘制壁纸.这些都没有实际阻止壁纸更新,所以我认为explorer.exe实际上并不处理绘制壁纸.
为了确认这一点,我杀死了explorer.exe并设置了一个小的c#程序,它将10秒计时器上的壁纸改为随机的.正如我所料,壁纸不断变化,让我相信explorer.exe实际上并没有处理壁纸的绘制!
不幸的是,这是我完全迷失的地方.我不知道还有什么负责绘制壁纸,以及我如何能够接管它的绘图以便我可以处理绘图.我已经尝试谷歌这几天了,几乎没有进展.我希望有人能指引我朝着正确的方向前进.
我希望使用C#为Windows XP设置壁纸.我已经开发了代码,因此它在Windows 7中完美运行,但显然它与XP不同.我将壁纸添加为资源,将其编译操作设置为内容并始终复制.奇怪的是,它在桌面属性对话框中设置了正确的墙纸名称.但是,壁纸未设置.我的代码看起来像这样:
public sealed class Wallpaper
{
Wallpaper() { }
const int SPI_SETDESKWALLPAPER = 20;
const int SPIF_UPDATEINIFILE = 0x01;
const int SPIF_SENDWININICHANGE = 0x02;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
public enum Style : int
{
Tiled,
Centered,
Stretched
}
public static void Set(string wpaper, Style style)
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
if (style == Style.Stretched)
{
key.SetValue(@"WallpaperStyle", 2.ToString());
key.SetValue(@"TileWallpaper", 0.ToString());
}
if (style == Style.Centered)
{ …
Run Code Online (Sandbox Code Playgroud) 如何以编程方式设置Windows 7 Wallpaper幻灯片?
设置普通壁纸
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni);
private static UInt32 SPI_SETDESKWALLPAPER = 20;
private static UInt32 SPIF_UPDATEINIFILE = 0x1;
public void SetImage(string filename)
{
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, filename, SPIF_UPDATEINIFILE);
}
Run Code Online (Sandbox Code Playgroud)
我到现在才发现:
幻灯片中有一个ini文件
C:\用户\ CurrentUser \应用程序数据\漫游\微软\的Windows \主题\
幻灯片放映期间,壁纸必须位于以下文件夹中:
C:\用户\ CurrentUser \应用程序数据\漫游\微软\的Windows \主题\ TranscodedWallpaper.jpg
(在幻灯片放映期间文件自动更改)
我正在尝试创建一个批处理文件,该程序将在Windows 7上关闭程序时更改我的背景.我尝试使用它,但它不起作用,即使我注销并重新登录:
@echo off
reg /add HKCU\Control Panel\Desktop\WallPaper /v wallpaper /t REG_SZ /d c:\images\wallpaper.bmp
Run Code Online (Sandbox Code Playgroud) 此代码适用于 Windows 7,但不适用于 Windows 10。而不是更改壁纸只是黑屏
[DllImport("User32", CharSet = CharSet.Auto)]
public static extern int SystemParametersInfo(int uiAction, int uiParam,
string pvParam, uint fWinIni);
static void Main(string[] args)
{
SystemParametersInfo(0x0014, 0, "Image.jpg", 0x0001);
}
Run Code Online (Sandbox Code Playgroud) c# ×4
wallpaper ×4
windows-7 ×3
windows ×2
background ×1
batch-file ×1
c#-4.0 ×1
desktop ×1
drawing ×1
opengl ×1
settings ×1
windows-10 ×1
windows-xp ×1