从注册表得到屏幕当前的壁纸并不难,但有时用api更改墙纸后,在注册表上没有资料,我试过用SPI_GETDESKWALLPAPER和SystemParametersInfo(115,MAX_PATH,path,0);之类的,不知是参数没有设好还是什么,并没有取得成功。好象这是个很高深的问题,好久了,没有人能搞定,高手可否赐教?

解决方案 »

  1.   

    被使用的墙纸,会被复制到一个特定的文件夹下
    win2000为例,C:\Documents and Settings\Administrator\Application Data\Microsoft\Internet Explorer
    在这个文件夹下,会有一个“Internet Explorer 墙纸.bmp”的文件。他的内容随墙纸的不同而不同,但名字好象是一样的。不知道这个能不能给你点提示。小弟菜鸟,见笑了!
      

  2.   

    用api的setdesk,是不会在注册表中写下记录的,怎么取?用注册表根本取不到的,老大,这里真的没有高手吗?
      

  3.   

    用api的setdesk,是不会在注册表中写下记录的,怎么取?用注册表根本取不到的,老大,这里真的没有高手吗?
    如果能用注册表取到文件名和路径不就行了么??图片本身当然不会在注册表里。
      

  4.   

    好象大家还没有明白,SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\temp\shit.bmp",0);
    能够设置壁纸,把以前的给覆盖掉;但设完后,注册表是不会有任何反映的,下次启动,也会重新显示注册表的图片,怎么才能取到现在这个用api设立的壁纸的文件路径和名称?或者判断是空的。国外有人试过SystemParametersInfo(SPI_GETDESKWALLPAPER, (uint)sWallpaper.Length, sWallpaper, (uint)0),但也没有成功。哪位高手得闲可否帮帮忙? 菜bird的就不要再说那些不好听的话了。好吗。
      

  5.   

    1、用鼠标右键点击桌面,会看到【背景】→【墙纸】里面的文件名是空的。 
      2、重新启动后桌面墙纸消失。 
      3、没告诉您怎么切换"居中"或"平铺"。 
      怎么解决这些问题呢? 
      1、Windows的墙纸必须以BMP格式的文件存放在Windows目录下面,如果您的图片不在该目录 或不是BMP文件,那么就会出现第一个问题。因此必须把您的图片转换成BMP文件并复制到Windows 目录下面。 
      2、要使重新启动后需要在注册表里面修改相应的键值,具体位置是 HKEY_CURRENT_USER\Control Panel\desktop中的Wallpaper键,让它的键值等于您的全路径文 件名。 
      3、在更换墙纸以前首先设置是否"居中",需要修改注册表中HKEY_CURRENT_USER\Control Panel\desktop中的TileWallpaper键,键值"0"表示"居中","1"表示"平铺"。 
      

  6.   

    RegistryKey RK = Registry.CurrentUser;
    RegistryKey ControlPanel = RK.OpenSubKey("Control Panel",true);
    RegistryKey Desktop = ControlPanel.OpenSubKey("Desktop",true);
    Desktop.SetValue("Wallpaper",FileNameStr);//FileNameStr是图片路径和名称
    int nResult =  WinAPI.SystemParametersInfo(SPI_SETDESKWALLPAPER,1,FileNameStr,SPIF_SENDCHANGE);  //用WINAPI对桌面壁纸进行操作
      

  7.   

    这个早就用过了,在注册表里用的是.gif,在WinAPI.SystemParametersInfo()中只能用.bmp,这就是两个文件名完全不同了,内容也会不同,.gif的文件会动画的,.bmp是静止的,根本无法判断目前的这个BMP内容是我们原来的.gif的内容。
      

  8.   

    需要使用ActiveDesktop 的COM我的顶尖虚拟桌面2005就是这样实现的,不过不能贴源码给你
      

  9.   

    C#中组件添加项中,并没有ActiveDesktop 的COM,必须要用到API吗?还是有别的引用途径?谢谢