刚作smartphone程序的时候有个功能就是设置一张图片为sp桌面背景,这个功能很长时间都没有完全实现,设置桌面有时成功,有时候则没有反应,几经辗转,最近还是ningxu告诉我是一个参数错了,才有了眉目,哈,发挥vckbase精神,分享之.
系统的主题文件和主题背景是放在\Storage\Application Data\Home下面的,所以习惯的,先把图片拷到这个文件夹下面,当然你不拷也可以。
1. 通过更改注册表设置图片路径,把HKEY_CURRENT_USER\\ControlPanel\\Home下的BgImage健的值设置为图片的路径.
CF1里面没有提供直接操作注册表的类,我们只有转调用api了,用CF2的就幸福了,直接用Registry 类实现吧
......
RegCreateKeyEx(HKEY_CURRENT_USER, L"\\ControlPanel\\Home", 0, NULL, 0, 0, NULL, &hKey, NULL);
RegSetValueEx(hKey, L"BgImage", 0, REG_SZ,(BYTE*)path, len);
......
2 .注册表修改完以后,要通知系统刷新一下,如下就可以了
[System.Runtime.InteropServices.DllImport("Coredll")]
private static extern IntPtr GetDesktopWindow();
[System.Runtime.InteropServices.DllImport("Coredll")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
IntPtr hWindow = GetDesktopWindow();
SendMessage((IntPtr)hWindow, 0x001A, 0, 0);
以上就完成了设置桌面背景的功能了。

上面是只是修改了sp主题风格的背景图片,并不改变现在使用的主题,如果想换个主题来使桌面图片更好看,也有办法哟,
更改注册表HKEY_CURRENT_USER\\ControlPanel\\Home下Scheme健值为主题文件的路径然后刷新一下就可以了。
其他的背景图片参考:
路径:HKEY_LOCAL_MACHONE\SOFTWARE\Microsoft\Shell\Rai\
各项对应的背景图片:
:MSScut\BKBitmapFile
快速拨号
:ErrorBox\BKBitmapFile
错误信息
:CallAlert\BKBitmapFile
来电时的背景
:InformationBox\BKBitmapFile
信息
:MSCdial\BKBitmapFile
输入号码
:MSClog\BKBitmapFile
通话记录
:MSCONTACTS\BKBitmapFile
联系人
:MSCPROG\BKBitmapFile
正在拨号
:MSStart\BKBitmapFile
开始菜单
:MSSYNCAPP\BKBitmapFile
ActiveSync背景
:QuestionBox\BKBitmapFile
确认
:VolDlg\BKBitmapFile
耳机音量
......
如果在对应的目录下,同时有BannerImage和BKBitmapFile,那么,前者图片大小为176×20,后者为176×160。如果只有BKBitmapFile,图片大小为176×180。当然,如果你觉得麻烦,可以把BannerImage删除,直接把BKBitmapFile设置为176×180就可以了。
开关机画面
路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Splash Screen
开机(按顺序显示):
MSBitmap
CarrierBitmap
关机(按顺序显示):
MSShutdownBitmap
CarrierShutdownBitmap
开关机图片大小为176×220,也就是全屏显示的图片。