如何以编程方式更改 Windows 桌面壁纸? [复制]

2023-11-27

我想使用 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)
        {
            key.SetValue(@"WallpaperStyle", 1.ToString());
            key.SetValue(@"TileWallpaper", 0.ToString());
        }

        if (style == Style.Tiled)
        {
            key.SetValue(@"WallpaperStyle", 1.ToString());
            key.SetValue(@"TileWallpaper", 1.ToString());
        }

        string tempPath = "Resources\\"+wpaper;
        SystemParametersInfo(SPI_SETDESKWALLPAPER,
            0,
            tempPath,
            SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
    }
}

当调用Wallpaper.Set("wpapername")时,它从项目资源中获取壁纸。它适用于Win7,但不适用于WinXP。难道我做错了什么?


好吧,这有点尴尬,但我会用我的发现来回答我自己的问题。

我必须重用已接受答案中的更多代码here。 基本上 XP 中的问题是它需要使用 bmp 文件,因此我设法使用前面的示例和一些调整将项目资源转换为 bmp 文件。 Set 方法完美地以这种方式工作:

public static void Set(string wpaper, Style style)
{
    using(System.Drawing.Image img = System.Drawing.Image.FromFile(Path.GetFullPath(wpaper)))
    {
        string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp");

        img.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp);

    }

    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)
    {
        key.SetValue(@"WallpaperStyle", 1.ToString());

        key.SetValue(@"TileWallpaper", 0.ToString());

    }

    if (style == Style.Tiled)
    {
        key.SetValue(@"WallpaperStyle", 1.ToString());

        key.SetValue(@"TileWallpaper", 1.ToString());

    }

    SystemParametersInfo(SPI_SETDESKWALLPAPER,
        0,
        tempPath,
        SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

}

重要的部分是这段代码的第三行(System.Drawing.Image.FromFile(Path.GetFullPath(wpaper));).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式更改 Windows 桌面壁纸? [复制] 的相关文章

  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • UICollectionView:选择时单元格大小变化动画

    我想要做的是更改 UICollectionViewCell 的大小 并在选择单元格时为该更改设置动画 我已经设法通过将单元格标记为选中来做到这一点 无需动画collectionView didSelectItemAtIndexPath 然后
  • 使用 NSInputStream 流式传输 NSXMLParser

    Update 使用时NSXMLParser类方法initWithContentsOfURL 它似乎尝试将整个 XML 文件加载到内存中 然后才启动解析过程 而不是在下载 XML 提要时进行解析 如果 XML 提要很大 使用过多的 RAM 本
  • 如何在 Spring 获取之前捕获 Spring Security 登录表单?

    我有一个带有用户名和密码的 Spring 登录表单 它指向 myapp j spring security check 我希望在 Spring 收到请求之前有人提交登录表单时拦截表单提交 基本上 我希望能够审查用户输入 看看它是否满足某些要
  • Java错误:比较方法违反了其一般契约

    我看到了很多与此相关的问题 并尝试解决该问题 但经过一小时的谷歌搜索和大量的试验和错误 我仍然无法解决它 我希望你们中的一些人能抓住这个问题 这就是我得到的 java lang IllegalArgumentException Compar
  • 不同模式下的 Spring Batch 元数据表

    我的应用程序中有一个连接到 Oracle 数据库的数据源 是否可以通过此数据源访问包含 Spring batch 元数据表的另一个架构 该数据源的用户拥有访问其他架构的所有权限 我已经尝试过 JobRepository 的 tablePre
  • 是否可以使用 Flexbox 混合行和列?

    换句话说 有可能实现这一目标吗 Note 这是我能得到的最好的 html body container height 100 container border 1px solid green display flex flex wrap w
  • 如何直接在 iPhone 中将 OTP 从用户的消息框填充到应用程序? [复制]

    这个问题在这里已经有答案了 我正在开发一个互联网交易应用程序 其移动和 iPhone 应用程序可用 根据最近的市场趋势 我们正在努力纳入双因素身份验证 为此 我们将通过短信向用户注册的手机号码发送一次性密码 有没有一种方法可以将 OTP 从
  • iPhone 应用程序更新与新版本

    假设我在 Appstore 上有一个现有的 IOS 应用程序 版本为 1 0 现在我对应用程序做了一些更改并想提交回来 有两种不同的提交方式吗 就像我仍然可以将版本保留为 1 0 并仅提交应用程序或 我需要创建一个新版本 1 1 然后提交吗
  • 如何从给定日期查找一周的开始日期?

    我担心的是 我想从给定的日期检索一周的开始日期 例如 15 04 2015 所以一周的开始将是 13 04 2015 对我来说 一周的开始是周一 thanks 尝试这个 Dim FirstDayInWeek LastDayInWeek As
  • 躲避误差条和点以避免重叠

    我正在尝试修复错误栏 以便它们在我的图表上实际上是可读的 唯一造成问题的是 2013 年的数据 我该怎么做呢 我看到了一些关于抖动或闪避的帖子 但我不确定如何应用它来解决我的问题 这是我试图更改的代码 YearlyDensity lt re
  • 相当于Python中F#的Seq.scan()方法吗?

    有没有类似F 的函数Seq scan 在Python中 我想做一些cumsum or cumproduct 没有循环的事情 我认为 Ignacio 的解决方案几乎是正确的 但需要类型为 a gt a gt a 的运算符 并且不会产生第一个元
  • 如何在两个值之间随机选择?

    所以基本上我试图让一段代码在两个值 40 和 40 之间随机选择 为此 我正在考虑使用古老的数学 例如 random num 1 value 40 其中 value 1 2 random num 顾名思义应该是一个随机数 有什么帮助吗 我正
  • 在给定禁用的未经身份验证的 IdentityId 的情况下,我可以使用 AWS Cognito 解析经过身份验证的 IdentityId 吗?

    我有一个支持 Cognito 未经身份验证的身份的 JavaScript Web 应用程序 我正在尝试找出如何识别链接的经过身份验证的 IdentityIdDISABLED未经身份验证的 IdentityId 第一个未经身份验证的用户通过以
  • 如何保护我的登录页面

    我有一个 login html 网页 让用户输入他的用户名和密码 当他单击 提交 时 我使用 Javascript 收集输入的值 然后对 php 文件进行 Ajax POST 调用并发送用户名和密码 我担心的是 这是发送用户名和密码的安全方
  • REST 数字或字符串资源标识符?

    我正在做一些研究来帮助我开发 REST API 这是我在任何地方都没有看到过深入讨论的主题 如果系统中有用户 使用数字标识符来识别用户是否更好 users 1 或者使用字符串标识符 用户 RSmith 我可以看到每种方法的假设潜在优点和缺点
  • 如何查看gdb内部智能指针的内部数据?

    我有如下测试程序 include
  • C演员的真正作用是什么?

    我编写了越来越多的 C 应用程序 现在我对强制类型转换感到好奇 在 C 中 动态转换是一种非常昂贵的操作 例如向下转换 但我什至不知道静态转换 在 C 语言中 我必须写这样的东西 assert p p is void int v int p
  • 当 new 表达式的参数子表达式抛出异常时释放内存

    动态分析在我们的代码库中发现了奇怪的内存泄漏 有问题的代码如下所示 Something p new Something getArgument 其中函数getArgument 有时会抛出 当它抛出时 新分配的对象就会被泄漏 这是由 Visu
  • [Authorize(Users = "*")] 在 asp.net mvc 中意味着什么

    什么是 Authorize Users 在 asp net mvc 中是什么意思 还请解释一下 Authorize Users and Authorize Users Thanks 要授权所有用户 只需省略使用 Authorize 属性一并
  • 如何以编程方式更改 Windows 桌面壁纸? [复制]

    这个问题在这里已经有答案了 我想使用 C 为 Windows XP 设置壁纸 我已经开发了代码 因此它可以在 Windows 7 中完美运行 但显然对于 XP 来说并不相同 我将该壁纸添加为资源 将其编译操作设置为内容并始终复制 奇怪的是