7

我正在开发一个需要获取当前用户的壁纸路径的工具。

在 Windows 7 上,我可以通过阅读

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\General\WallpaperSource.

在我的 Windows 8 安装中,该密钥始终具有值

C:\Users\Peter\AppData\Roaming\Microsoft\Windows Photo Viewer\Windows Photo Viewer Wallpaper.jpg

这甚至不是当前设置的壁纸。

还有其他我可以依赖的密钥吗?

4

4 回答 4

11

最好使用 SPI_SETDESKWALLPAPER 选项调用SystemParametersInfo来设置桌面墙纸。据我所知,您使用的注册表项未记录在案,因此可以随时更改而不会发出警告。

有关如何使用 SPI_SETDESKWALLPAPER 调用 SystemParametersInfo 的示例,请参阅此堆栈溢出问题。

于 2012-07-01T15:10:29.680 回答
10

很大程度上基于pinvoke.net上可用的代码,检索当前用户桌面壁纸的正确方法是使用该SystemParametersInfo函数。执行此操作的示例如下:

using System;
using System.Runtime.InteropServices;

namespace WallpaperPathRetrieval
{
    class Program
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern Int32 SystemParametersInfo(UInt32 action, 
            UInt32 uParam, string vParam, UInt32 winIni);
        private static readonly UInt32 SPI_GETDESKWALLPAPER = 0x73;
        private static uint MAX_PATH = 260;

        static void Main(string[] args)
        {
            string wallpaper = new string('\0', (int)MAX_PATH);
            SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, wallpaper, 0);

            wallpaper = wallpaper.Substring(0, wallpaper.IndexOf('\0'));
        }
    }
}
于 2012-07-02T08:08:37.833 回答
6

您提到的密钥不是正确的。听起来你已经从 Internet Explorer 中放置了一个图像作为桌面背景,并且打开了那个键来注册它。

获取桌面背景位置的正确键为: Confirmed on: XP, CE, Vista, 7, 8

HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper

细节:

  • 主键:HKEY_CURRENT_USER
  • 子键:控制面板\桌面
  • 值名称:WallPaper
  • 值类型:REG_SZ
  • 值数据:用作桌面背景的图像的完整路径

此外,HKEY_CURRENT_USER\Control Panel\Desktop\您还会在下面找到其他与壁纸相关的选项以应用不同的样式:中心、平铺和拉伸。

HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperStyle
HKEY_CURRENT_USER\Control Panel\Desktop\TileWallpaper

为了应用样式,请使用以下指南:

  1. 中心

    WallpaperStyle = 0
    TileWallpaper = 0
    
  2. WallpaperStyle = 0
    TileWallpaper = 1
    
  3. 拉紧

    WallpaperStyle = 2
    TileWallpaper = 0
    
于 2012-07-01T01:14:55.653 回答
0

它存储在名为 TranscodedImageCache (REG_BINARY) 的值中。这是一个读取/转换为纯文本并输出值的 VBScript。

如何在 Windows 8 中确定当前壁纸文件名和路径 - Winhelponline 博客

于 2013-10-25T06:53:55.707 回答