1 void SetTheme()
2 {
3 HKEY hKey;
4 LONG lRet;
5 TCHAR szCmdLine[MAX_PATH+1];
6 TCHAR* pszFile = _T("mytheme.tsk"); // The theme file
7
8 lRet = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Today"), 0, 0,&hKey);
9
10 if(ERROR_SUCCESS == lRet)
11 {
12 RegDeleteValue(hKey, _T("UseStartImage"));
13
14 wcscpy(szCmdLine, _T("/safe /noui /nouninstall /delete 0 "));
15 wcscat(szCmdLine, pszFile);
16
17 PROCESS_INFORMATION pi;
18
19 if(CreateProcess(_T("\\Windows\\wceload.exe"),szCmdLine,NULL, NULL, FALSE, 0, NULL, NULL, NULL , &pi))
20 {
21 WaitForSingleObject(pi.hProcess, INFINITE);
23 CloseHandle(pi.hProcess);
25 RegSetValueEx(hKey, _T("Skin"), 0, REG_SZ,(BYTE*)pszFile, sizeof(TCHAR) * (wcslen(pszFile) + 1);
27 RegCloseKey(hKey);
31 :SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0xF2,0);
32 }
34 }
35 }
36
2 {
3 HKEY hKey;
4 LONG lRet;
5 TCHAR szCmdLine[MAX_PATH+1];
6 TCHAR* pszFile = _T("mytheme.tsk"); // The theme file
7
8 lRet = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Today"), 0, 0,&hKey);
9
10 if(ERROR_SUCCESS == lRet)
11 {
12 RegDeleteValue(hKey, _T("UseStartImage"));
13
14 wcscpy(szCmdLine, _T("/safe /noui /nouninstall /delete 0 "));
15 wcscat(szCmdLine, pszFile);
16
17 PROCESS_INFORMATION pi;
18
19 if(CreateProcess(_T("\\Windows\\wceload.exe"),szCmdLine,NULL, NULL, FALSE, 0, NULL, NULL, NULL , &pi))
20 {
21 WaitForSingleObject(pi.hProcess, INFINITE);
23 CloseHandle(pi.hProcess);
25 RegSetValueEx(hKey, _T("Skin"), 0, REG_SZ,(BYTE*)pszFile, sizeof(TCHAR) * (wcslen(pszFile) + 1);
27 RegCloseKey(hKey);
31 :SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0xF2,0);
32 }
34 }
35 }
36
哈哈,好像题有点跑了,其实tsk文件主要是给系统改写注册表和添加两个图像文件。可是在定制ROM的时候却不能却不能通过简单的写注册表和添加图像文件来实现默认主题的修改,就算你在定制ROM的时候添加这样的注册表项,也是没用,因为系统在编译的时候会改写你这个注册表项,这个改写的动作由一个xml文件来控制,你可以查看一下wm61themeconfig_96.xml,你会发现这个就是WM用来设置默认主题的控制文件,里面记录了默认tsk文件名、系统上下栏颜色以及SHCOLOR和SYSCOLOR等系统颜色设置方面的信息。所以不能把这个文件包含进bin里面。工作还没好,你还需要找到Base_DPI_96.cab.pkg并且把它删除掉,其实之前删除wm61themeconfig_96.xml,但是系统依然会重新生成一个wm61themeconfig_96.xml文件,这是因为由Base_DPI_96.cab.pkg自动生成的,这个文件都是都是由一些16进制的字符表示的,主要记录系统图标、系统图标等信息,所以要想彻底的定制自定义默认主题也必须把BSP中的Base_DPI_96.cab.pkg干掉。除此以外,还是需要把tsk文件中的图片解压编译,把tsk文件的注册表项导出来添加到platform.reg。这样就OK了,虽然这种办法是work的,但是其中不乏暴力行为,还没有更好的办法之前只能这样干呗。网上还有一些说通过修改wm61themeconfig_96.xml,方法理论上应该可以,没那么暴力但是没有试过也不清楚是否work。如果行的话,朋友可以留言通告一声。