您的位置:首页 > 其它

锁屏背景替换-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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: