锁屏背景替换-xp篇
2016-06-24 22:57
302 查看
1、背景界面替换原理
xp不同win7,设置比较复杂,没有现成的接口可以调用。大家可以尝试一下,XP是桌面是什么图片,那么锁屏的时候就是什么背景。因此,设置xp锁屏背景,只需要在锁屏时,动态替换桌面背景即可(这里背景的替换会有点延时的),然后解锁时,恢复之前的桌面背景即可,这里你必须小心处理各种事件,否则,之前的桌面可能不能恢复成功。BOOL CXPDesktopUtil::SetWallpaper(LPTSTR lpPicFile, DWORD dwStyle) { HRESULT hr; IActiveDesktop* pIAD; //创建接口的实例 CoInitialize(NULL); hr = CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_INPROC_SERVER,IID_IActiveDesktop,(void**)&pIAD); if(!SUCCEEDED(hr)) { return FALSE; } //将文件名改为宽字符串,这是IActiveDesktop::SetWallpaper的要求 WCHAR wszWallpaper[MAX_PATH]; MultiByteToWideChar(CP_ACP,0,lpPicFile,-1,wszWallpaper,MAX_PATH); //设置墙纸 hr = pIAD-> SetWallpaper(wszWallpaper, 0); if(!SUCCEEDED(hr)) { return TRUE; } //设置墙纸的样式 WALLPAPEROPT wpo; wpo.dwSize = sizeof(wpo); wpo.dwStyle = dwStyle; hr = pIAD->SetWallpaperOptions(&wpo,0); if(!SUCCEEDED(hr)) { return FALSE; } //应用墙纸的设置 hr = pIAD-> ApplyChanges(AD_APPLY_ALL); if(!SUCCEEDED(hr)) { return FALSE; } //释放接口的实例 pIAD-> Release(); CoUninitialize(); return TRUE; }
备份之前桌面的背景图片
CString CXPDesktopUtil::backupWallPaper(LPTSTR lpPicFile) { TCHAR szPath[MAX_PATH] = { 0 }; CString strBackup = CAppUtil::getApplicationDirectory() + "backup"; if (FALSE == PathFileExists(strBackup.GetBuffer())) { if(FALSE == CreateDirectory(strBackup.GetBuffer(), NULL)){ return _T(""); } } strBackup += _T("\\backgroundDefault.jpg"); ::CopyFile(lpPicFile, strBackup.GetBuffer(), FALSE); return strBackup; }
这里你可能需要关闭用户快速切换
//关闭快速用户切换 HKEY hKey; LPCTSTR lpRun = _T("SOFTWARE\\Microsoft\\\Windows NT\\CurrentVersion\\Winlogon"); long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); if(lRet== ERROR_SUCCESS) { DWORD dwValue = 0; lRet = RegSetValueEx(hKey, _T("AllowMultipleTSSessions"), 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue)); if (ERROR_SUCCESS == lRet) { } else { DWORD dwError = GetLastError(); } RegCloseKey(hKey); }
2、定时器
同win7的。3、恢复
替换之前备份的桌面背景即可。附完整的源代码:
http://git.oschina.net/zhujf21st/LockApp相关文章推荐
- 灵感
- JAVA之IO 基础(字节流和字符流)
- Qt .pro文件部分变量解析
- java_简单的写个二叉树
- vim的配置
- 剑指offer 面试题2 Singleton模式 C++实现
- Android Tips
- ubuntu 14.04 以root权限启动chrome
- yield return 学习
- 一些简单知识点
- Android开发--CardView使用
- filter过滤器设置URL例外
- 写简历注意事项
- PAT乙级练习题B1016.部分A+B
- 水管工游戏
- 鸽笼原理应用举例
- Android studio 目录结构
- XXX P2P公司堡垒机项目帐号集中管理定制开发说明
- 笔记:centos6 rsync配置测试
- 顶级会议特征