请问我如何知道电脑当前使用的桌面背景图片的名称?

hong_liang 2008-04-08 04:40:32
请问我如何知道电脑当前使用的桌面背景图片的名称?我想知道如何用程序知道当前桌面的背景图片是什么,存放在哪里?最重要的是使用了哪张图片?麻烦各位了,谢谢!
...全文
604 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hong_liang 2008-04-08
  • 打赏
  • 举报
回复
多谢 “viki117” 提供了我最需要的东西

TO boblaw:
你提供了很宝贵的函数,我还没试过,但也同样很感谢


另外也非常感谢各位的顶力相助,谢谢!
blackant2 2008-04-08
  • 打赏
  • 举报
回复
1.引入com定义
enum WPSTYLE
{
CENTER = 0,
TILE = 1,
STRETCH = 2,
MAX = 3
}

struct WALLPAPEROPT
{
public int dwSize;
public WPSTYLE dwStyle;
}

struct COMPONENTSOPT
{
public int dwSize;
[MarshalAs(UnmanagedType.Bool)] public bool fEnableComponents;
[MarshalAs(UnmanagedType.Bool)] public bool fActiveDesktop;
}

struct COMPPOS
{
public const int COMPONENT_TOP = 0x3FFFFFFF;
public const int COMPONENT_DEFAULT_LEFT = 0xFFFF;
public const int COMPONENT_DEFAULT_TOP = 0xFFFF;

public int dwSize;
public int iLeft;
public int iTop;
public int dwWidth;
public int dwHeight;
public int izIndex;
[MarshalAs(UnmanagedType.Bool)] public bool fCanResize;
[MarshalAs(UnmanagedType.Bool)] public bool fCanResizeX;
[MarshalAs(UnmanagedType.Bool)] public bool fCanResizeY;
public int iPreferredLeftPercent;
public int iPreferredTopPercent;
}

[Flags]
enum ITEMSTATE
{
NORMAL = 0x00000001,
FULLSCREEN = 00000002,
SPLIT = 0x00000004,
VALIDSIZESTATEBITS = NORMAL | SPLIT | FULLSCREEN,
VALIDSTATEBITS = NORMAL | SPLIT | FULLSCREEN |
unchecked((int)0x80000000) | 0x40000000
}

struct COMPSTATEINFO
{
public int dwSize;
public int iLeft;
public int iTop;
public int dwWidth;
public int dwHeight;
public int dwItemState;
}

enum COMP_TYPE
{
HTMLDOC = 0,
PICTURE = 1,
WEBSITE = 2,
CONTROL = 3,
CFHTML = 4,
MAX = 4
}

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct COMPONENT
{
private const int INTERNET_MAX_URL_LENGTH = 2084; // =
// INTERNET_MAX_SCHEME_LENGTH (32) + "://\0".Length +
// INTERNET_MAX_PATH_LENGTH (2048)

public int dwSize;
public int dwID;
public COMP_TYPE iComponentType;
[MarshalAs(UnmanagedType.Bool)] public bool fChecked;
[MarshalAs(UnmanagedType.Bool)] public bool fDirty;
[MarshalAs(UnmanagedType.Bool)] public bool fNoScroll;
public COMPPOS cpPos;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)] public string
wszFriendlyName;
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst=INTERNET_MAX_URL_LENGTH)] public string wszSource;
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst=INTERNET_MAX_URL_LENGTH)] public string wszSubscribedURL;

#if AD_IE5
public int dwCurItemState;
public COMPSTATEINFO csiOriginal;
public COMPSTATEINFO csiRestored;
#endif
}

enum DTI_ADTIWUI
{
DTI_ADDUI_DEFAULT = 0x00000000,
DTI_ADDUI_DISPSUBWIZARD = 0x00000001,
DTI_ADDUI_POSITIONITEM = 0x00000002,
}

[Flags]
enum AD_APPLY
{
SAVE = 0x00000001,
HTMLGEN = 0x00000002,
REFRESH = 0x00000004,
ALL = SAVE | HTMLGEN | REFRESH,
FORCE = 0x00000008,
BUFFERED_REFRESH = 0x00000010,
DYNAMICREFRESH = 0x00000020
}

[Flags]
enum COMP_ELEM
{
TYPE = 0x00000001,
CHECKED = 0x00000002,
DIRTY = 0x00000004,
NOSCROLL = 0x00000008,
POS_LEFT = 0x00000010,
POS_TOP = 0x00000020,
SIZE_WIDTH = 0x00000040,
SIZE_HEIGHT = 0x00000080,
POS_ZINDEX = 0x00000100,
SOURCE = 0x00000200,
FRIENDLYNAME = 0x00000400,
SUBSCRIBEDURL = 0x00000800,
ORIGINAL_CSI = 0x00001000,
RESTORED_CSI = 0x00002000,
CURITEMSTATE = 0x00004000,
ALL = TYPE | CHECKED | DIRTY | NOSCROLL | POS_LEFT | SIZE_WIDTH |
SIZE_HEIGHT | POS_ZINDEX | SOURCE |
FRIENDLYNAME | POS_TOP | SUBSCRIBEDURL | ORIGINAL_CSI |
RESTORED_CSI | CURITEMSTATE
}

[Flags]
enum ADDURL
{
SILENT = 0x0001
}

[
ComImport(),
Guid("F490EB00-1240-11D1-9888-006097DEACF9"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IActiveDesktop
{
void ApplyChanges(AD_APPLY dwFlags);
void GetWallpaper([MarshalAs(UnmanagedType.LPWStr)]
System.Text.StringBuilder pwszWallpaper, int cchWallpaper, int
dwReserved);
void SetWallpaper([MarshalAs(UnmanagedType.LPWStr)] string
pwszWallpaper, int dwReserved);
void GetWallpaperOptions(ref WALLPAPEROPT pwpo, int dwReserved);
void SetWallpaperOptions([In] ref WALLPAPEROPT pwpo, int
dwReserved);
void GetPattern([MarshalAs(UnmanagedType.LPWStr)]
System.Text.StringBuilder pwszPattern, int cchPattern, int
dwReserved);
void SetPattern([MarshalAs(UnmanagedType.LPWStr)] string
pwszPattern, int dwReserved);
void GetDesktopItemOptions(ref COMPONENTSOPT pco, int dwReserved);
void SetDesktopItemOptions([In] ref COMPONENTSOPT pco, int
dwReserved);
void AddDesktopItem([In] ref COMPONENT pcomp, int dwReserved);
void AddDesktopItemWithUI(IntPtr hwnd, [In] ref COMPONENT pcomp,
DTI_ADTIWUI dwFlags);
void ModifyDesktopItem([In] ref COMPONENT pcomp, COMP_ELEM
dwFlags);
void RemoveDesktopItem([In] ref COMPONENT pcomp, int dwReserved);
void GetDesktopItemCount(out int lpiCount, int dwReserved);
void GetDesktopItem(int nComponent, ref COMPONENT pcomp, int
dwReserved);
void GetDesktopItemByID(IntPtr dwID, ref COMPONENT pcomp, int
dwReserved);
void GenerateDesktopItemHtml([MarshalAs(UnmanagedType.LPWStr)]
string pwszFileName, [In] ref COMPONENT pcomp, int dwReserved);
void AddUrl(IntPtr hwnd, [MarshalAs(UnmanagedType.LPWStr)] string
pszSource, [In] ref COMPONENT pcomp, ADDURL dwFlags);
void GetDesktopItemBySource([MarshalAs(UnmanagedType.LPWStr)]
string pwszSource, ref COMPONENT pcomp, int dwReserved);
}

[
ComImport(),
Guid("75048700-EF1F-11D0-9888-006097DEACF9")
]
class ActiveDesktop /* : IActiveDesktop */ {}

2.使用
ActiveDesktop ad = new ActiveDesktop();
IActiveDesktop iad = ad as IActiveDesktop;
if (iad != null)
{
StringBuilder wallpaper = new StringBuilder(512);
iad.GetWallpaper(wallpaper, 512, 0);
string file = wallpaper.ToString();
Marshal.ReleaseComObject(ad);
ad = null;

}
ludingping 2008-04-08
  • 打赏
  • 举报
回复
对。注册表里应该可以查到。
Go 旅城通票 2008-04-08
  • 打赏
  • 举报
回复
using System;
using Microsoft.Win32;

namespace WallPaper
{
class Program
{
static void Main(string[] args)
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\LastTheme");
if (rk == null)
{
Console.WriteLine("不存在!");
return;
}
Console.WriteLine("Wallpaper:" + rk.GetValue("Wallpaper"));
Console.WriteLine("按Enter退出!");
Console.ReadLine();
}
}
}
boblaw 2008-04-08
  • 打赏
  • 举报
回复
更正,“可能”-->“可以”
CathySun118 2008-04-08
  • 打赏
  • 举报
回复
Api SystemParametersInfo
参考:
http://www.accdb.net/article.asp?id=911
boblaw 2008-04-08
  • 打赏
  • 举报
回复
7楼正确。
另外可能通过API来获得,SystemParametersInfo参数SPI_GETDESKWALLPAPER
viki117 2008-04-08
  • 打赏
  • 举报
回复
HKEY_CURRENT_USER\control panel\desktop中的ConvertedWallpaper
不知道是不是这个地址。。。
jaffar 2008-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 viki117 的回复:]
如果我没有猜错的话,可以试下读取注册表信息看看。。
[/Quote]


同感
dangnilaoqu 2008-04-08
  • 打赏
  • 举报
回复
正在观望中……
viki117 2008-04-08
  • 打赏
  • 举报
回复
如果我没有猜错的话,可以试下读取注册表信息看看。。
grearo 2008-04-08
  • 打赏
  • 举报
回复
调用API,分析explorer进程
zccmy22 2008-04-08
  • 打赏
  • 举报
回复
最好提供源代码全一点的。我也想看一看。
viki117 2008-04-08
  • 打赏
  • 举报
回复
顶下,我也有兴趣知道这么实现。。。
全书由Kylin桌面版安装、用户个性化设置、网络配置与应用、常用软件的安装与使用、系统维护等7个项目构成,每一个项目均源于一个真实的应用场景,按工作过程系统化展开。通过在业务场景中学习和实践,让读者快速熟悉Kylin桌面版及应用软件的使用,助力高效办公。课程项目按企业工程项目实施流程分解为若干工作任务。通过项目背景、项目分析、项目相关知识为任务做铺垫;任务实施过程由任务说明、任务操作和任务验证构成,符合工程项目实施的一般规律。本课程主要学习内容:项目1  Jan16公司办公电脑Kylin操作系统的安装课程概述 安装Kylin操作系统 初始化设置 项目2  Jan16公司办公电脑桌面设置 桌面个性化设置 设置任务栏      使用启动器      文件资源管理和设置 项目3  Jan16公司办公电脑Kylin用户的创建与管理 管理本地用户账户      绑定麒麟云账户 项目4  Jan16公司办公电脑网络设置与应用 使用有线连接网络 使用无线连接网络 使用浏览器浏览网页 项目5  Jan16公司办公电脑应用软件的安装与管理 管理应用程序 管理输入法 邮箱应用 办公应用 多媒体应用 系统安全应用 项目6  Jan16公司办公电脑硬件设备管理 磁盘管理 外设管理 项目7 Jan16公司办公电脑系统维护 使用设备管理器管理设备 使用系统监视器监视系统性能 系统备份与还原  

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧