锁屏背景替换(2)-Win7篇
来源:互联网 发布:u盘格式化数据还有 编辑:程序博客网 时间:2024/05/18 03:54
1、背景界面替换原理
第一步:监听锁屏事件;LRESULT CLockAPPSampleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
1 LRESULT CLockAPPSampleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 2 { 3 // TODO: Add your specialized code here and/or call the base class 4 switch(message) 5 { 6 case WM_WTSSESSION_CHANGE: 7 { 8 //MessageBox("WM_WTSSESSION_CHANGE", "Esmile", MB_OK); 9 10 switch(wParam)11 {12 case WTS_SESSION_LOCK:13 {14 //锁屏事件15 }16 17 break;18 case WTS_SESSION_UNLOCK:19 {20 //解锁时间21 }22 break;23 default:24 break;25 }26 27 }28 break;29 case WM_DESTROY:30 WTSUnRegisterSessionNotification(m_hWnd);31 break;32 33 34 default:35 break;36 }37 38 return CDialog::WindowProc(message, wParam, lParam);39 }
第二步:将图片拷贝C:\Windows\System32\oobe\info\Backgrounds目录下,名字可以任意;
1 void CWin7DesktopUtil::copyFile(LPTSTR lpPicFile) 2 { 3 TCHAR szPath[MAX_PATH] = { 0 }; 4 5 _tcscpy(szPath, _T("C:\\Windows\\System32\\oobe")); 6 7 if (FALSE == PathFileExists(szPath)) { 8 if(FALSE == CreateDirectory(szPath, NULL)){ 9 return;10 }11 }12 13 _tcscat(szPath, _T("\\info"));14 if (FALSE == PathFileExists(szPath)) {15 if(FALSE == CreateDirectory(szPath, NULL)){16 return;17 }18 }19 20 _tcscat(szPath, _T("\\Backgrounds"));21 if (FALSE == PathFileExists(szPath)) {22 if(FALSE == CreateDirectory(szPath, NULL)){23 return;24 }25 }26 27 _tcscat(szPath, _T("\\backgroundDefault.jpg"));28 ::CopyFile(lpPicFile, szPath, FALSE);29 }
第三步:设置注册表
将SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background下的
OEMBackground键值设为1
1 BOOL CWin7DesktopUtil::setOEMBackground(DWORD dwValue) 2 { 3 HKEY hKey; 4 5 LPCTSTR lpRun = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background"); 6 long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE|KEY_WOW64_64KEY, &hKey); 7 if(lRet== ERROR_SUCCESS) 8 { 9 lRet = RegSetValueEx(hKey, _T("OEMBackground"), 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue));10 if (ERROR_SUCCESS == lRet)11 {12 RegCloseKey(hKey); 13 return TRUE;14 }15 else16 {17 DWORD dwError = GetLastError();18 }19 20 RegCloseKey(hKey); 21 }22 23 return FALSE;24 }
PS:
1、此处需要注意图片大小不能大于256K,否则设置无效。
2、考虑64位系统情况,拷贝之前调用Wow64DisableWow64FsRedirection
2、定时器
这个很简单。
第一步:检索图片文件夹,保存到m_strPathArray数组中
1 void CRandomImage::search(LPTSTR path) 2 { 3 HANDLE hFind; 4 WIN32_FIND_DATA wfd; 5 TCHAR tempPath[MAX_PATH]; 6 7 ZeroMemory(&wfd, sizeof(WIN32_FIND_DATA)); 8 9 memset(tempPath, 0, sizeof(tempPath)); 10 sprintf(tempPath, "%s\\*.*", path); 11 12 hFind = FindFirstFile(tempPath, &wfd); 13 if(INVALID_HANDLE_VALUE == hFind) 14 { 15 return; 16 } 17 do 18 { 19 if('.' == wfd.cFileName[0]) 20 { 21 continue; 22 } 23 24 if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 25 { 26 sprintf(tempPath, "%s\\%s", path, wfd.cFileName); 27 28 search(tempPath); 29 } 30 else 31 { 32 sprintf(tempPath, "%s\\%s", path, wfd.cFileName); 33 m_strPathArray.Add(tempPath);34 } 35 }while(FindNextFile(hFind, &wfd)); 36 37 FindClose(hFind); 38 }
第二部:从图片文件夹中随机选取一张图片
1 const CString CRandomImage::getRandomImage() 2 { 3 INT32 length = m_strPathArray.GetCount(); 4 if (length == 0) { 5 return _T(""); 6 } 7 8 { 9 srand((unsigned)time(NULL));10 m_iRandomIndex = rand() % length;11 }while(m_iRandomIndex == length);12 13 14 return m_strPathArray.GetAt(m_iRandomIndex);15 }
3、恢复
将SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background下的
OEMBackground键值设为0
阅读全文
0 0
- 锁屏背景替换(2)-Win7篇
- 锁屏背景替换-Win7篇
- 锁屏背景替换-xp篇
- 锁屏背景替换(3)-xp篇
- 锁屏背景替换-概述
- win7锁屏背景修改
- 锁屏背景替换(1)-概述
- win7锁屏背景壁纸修改
- 修改win7锁屏界面背景
- win7修改默认锁屏背景
- 替换layout图片背景
- Gimp 替换白色背景
- 改变启动页黑白屏,替换成自己的背景
- Win7主题背景目录
- win7替换桌面图标
- C#替换WIN7桌面
- 背景选择器selector替换按钮默认背景
- 简单的链接背景替换
- “自嘲”是程序员的幽默,还是程序员的悲哀?
- vim中使用正则表达式
- 锁屏背景替换(1)-概述
- apache poi 的java例子,是由原厂提供的
- java 字符串截取的方法
- 锁屏背景替换(2)-Win7篇
- 锁屏背景替换(3)-xp篇
- Mockito 如何 mock 返回值为 void 的方法
- 配置nginx 403 Forbidden
- 线程局部存储技术
- RTTI运行时类型识别
- Tomcat NIO模式修改
- C++源文件后缀名
- Tomcat管理页面登陆方法