Windows Mobile上主題的製作與原理分析

來源:互聯網
上載者:User

Windows Mobile的主題其實就是一個tsk檔案,我們把我們製作好的tsk檔案放到windows目錄下,之後開啟今日設定裡,今日設定的程式會預設掃描windows目錄下的尾碼為tsk的檔案,然後對tsk進行解壓,將各種配置讀取出來,讀出來之後系統會寫到註冊表裡,下次讀取直接從註冊表中讀取。tsk檔案其實就是Cab Manager製作完的cab包尾碼改名為tsk。

我們可以用zip解壓縮工具對tsk檔案進行解壓,我解壓了一個現有的tsk檔案,解壓完之後我們會發現存在有_setup.xml、STWATE~1.001、STWATE~2.002,開啟_setup.xml查看了一下,是這樣的:

 

<wap-provisioningdoc><br /><characteristic type="Install"><br /><parm name="InstallPhase" value="install" /><br /><parm name="OSVersionMin" value="4.0" /><br /><parm name="OSVersionMax" value="6.99" /><br /><parm name="BuildNumberMin" value="0" /><br /><parm name="BuildNumberMax" value="-536870912" /><br /><parm name="AppName" value="UMU Corporation UMU Theme" /><br /><parm name="InstallDir" value="%CE2%" translation="install" /><br /><parm name="NumDirs" value="1" /><br /><parm name="NumFiles" value="2" /><br /><parm name="NumRegKeys" value="3" /><br /><parm name="NumRegVals" value="43" /><br /><parm name="NumShortcuts" value="0" /><br /></characteristic><br /><characteristic type="FileOperation"><br /><characteristic type="%CE2%" translation="install"><br /><characteristic type="MakeDir" /><br /><characteristic type="stwater_240_320.png" translation="install"><br /><characteristic type="Extract"><br /><parm name="Source" value="STWATE~1.001" /><br /></characteristic><br /></characteristic><br /><characteristic type="stwater_320_240.png" translation="install"><br /><characteristic type="Extract"><br /><parm name="Source" value="STWATE~2.002" /><br /></characteristic><br /></characteristic><br /></characteristic><br /></characteristic><br /><characteristic type="Registry"><br /><characteristic type="HKCU/Software/Microsoft/Today/UMU.tsk"><br /><parm name="UseDefaultTitleColor" value="0" datatype="integer" /><br /><parm name="Color_BtnFace" value="1NDIAA==" datatype="binary" /><br /><parm name="Color_BtnText" value="AACAAA==" datatype="binary" /><br /><parm name="Color_CommandBar" value="AAAAAA==" datatype="binary" /><br /><parm name="Color_CommandBarText" value="////AA==" datatype="binary" /><br /><parm name="Color_CommandBarText_Highlight" value="gBYwAA==" datatype="binary" /><br /><parm name="Color_GrayText" value="v7+/AA==" datatype="binary" /><br /><parm name="Color_Highlight" value="gBYwAA==" datatype="binary" /><br /><parm name="Color_HighlightText" value="nrTpAA==" datatype="binary" /><br /><parm name="Color_InactiveCaptionText" value="oKCgAA==" datatype="binary" /><br /><parm name="Color_MenuText" value="AAAAAA==" datatype="binary" /><br /><parm name="Color_NavBarText_Highlight" value="gBYwAA==" datatype="binary" /><br /><parm name="Color_SoftkeyFlat" value="AAAAAA==" datatype="binary" /><br /><parm name="Color_TitleFlat" value="AAAAAA==" datatype="binary" /><br /><parm name="Color_TitleFlatDoneBtn_Highlight" value="gBYwAA==" datatype="binary" /><br /></characteristic><br /><characteristic type="HKCU/Software/Microsoft/Today"><br /><parm name="UseStartImage" value="1" datatype="integer" /><br /><parm name="DPI" value="192" datatype="integer" /><br /></characteristic><br /><characteristic type="HKLM/Software/Microsoft/Color"><br /><parm name="4" value="////AA==" datatype="binary" /><br /><parm name="5" value="AAAAAA==" datatype="binary" /><br /><parm name="6" value="gICAAA==" datatype="binary" /><br /><parm name="7" value="AAAAAA==" datatype="binary" /><br /><parm name="8" value="AAAAAA==" datatype="binary" /><br /><parm name="9" value="////AA==" datatype="binary" /><br /><parm name="11" value="gBYwAA==" datatype="binary" /><br /><parm name="12" value="AAAAAA==" datatype="binary" /><br /><parm name="13" value="AAAAAA==" datatype="binary" /><br /><parm name="14" value="wMDAAA==" datatype="binary" /><br /><parm name="15" value="z+jMAA==" datatype="binary" /><br /><parm name="16" value="u9+3AA==" datatype="binary" /><br /><parm name="17" value="gICAAA==" datatype="binary" /><br /><parm name="18" value="gICAAA==" datatype="binary" /><br /><parm name="19" value="nrTpAA==" datatype="binary" /><br /><parm name="25" value="AAAAAA==" datatype="binary" /><br /><parm name="26" value="wMDAAA==" datatype="binary" /><br /><parm name="32" value="////AA==" datatype="binary" /><br /><parm name="33" value="AAAAAA==" datatype="binary" /><br /><parm name="34" value="gBYwAA==" datatype="binary" /><br /><parm name="35" value="nrTpAA==" datatype="binary" /><br /><parm name="36" value="z+jMAA==" datatype="binary" /><br /><parm name="37" value="u9+3AA==" datatype="binary" /><br /><parm name="38" value="AAAAAA==" datatype="binary" /><br /><parm name="39" value="////AA==" datatype="binary" /><br /><parm name="40" value="gBYwAA==" datatype="binary" /><br /></characteristic><br /></characteristic><br /></wap-provisioningdoc>

 

<characteristic type="stwater_240_320.png" translation="install">
<characteristic type="Extract">
<parm name="Source" value="STWATE~1.001" />
</characteristic>

從這段可以看出,STWATE~1.001 這個檔案其實就是stwater_240_320.png 這個圖片檔案, 也就是說tsk裡麵包含了開始菜單背景檔案,stwater開頭的檔案都是開始菜單背景檔案,同時xml裡定義了:

<characteristic type="HKCU/Software/Microsoft/Today">
<parm name="UseStartImage" value="1" datatype="integer" />
<parm name="DPI" value="192" datatype="integer" />
</characteristic>

這裡UseStartImage設定為1表示案頭壁紙採用的是菜單背景圖片檔案, wm 文檔裡這樣說:

If this value is set to 1, then the Start menu background image will be used as the Today screen background image. This means only the stwater.gif file would need to be supplied.

 

插個題外話,系統預設的壁紙檔案是/windows/tdywater.gif(尾碼沒什麼影響,png的也可以)

關於開始菜單圖片,系統會自動根據當前裝置解析度尋找windows目錄下的以下類型檔案:

"stwater_240_240.gif"

 "stwater_240_320.gif"

 "stwater_320_240.gif"

  "stwater_640_480.gif" 等等

 

注意一下:

If none of the supplied images tdywater_<screenwidth>_<screenheight> and stwater_<screenwidth>_<screenheight> match the current screen resolution, then the files with the name tdywater.gif and stwater.gif will be used.

 

 

tsk裡通過兩個註冊表值來改變shell的顏色和系統色彩,分別為:

HKEY_LOCAL_MACHINE/Software/Microsoft/Color/ShColor 和

HKEY_LOCAL_MACHINE/System/GWE/SysColor

這兩項都是二進位值(binary large objects ),ShColor 包含41個的dword值,SysColor包含29個字元。

我們看到的這些:

<characteristic type="HKLM/Software/Microsoft/Color">
<parm name="4" value="////AA==" datatype="binary" />
<parm name="5" value="AAAAAA==" datatype="binary" />
<parm name="6" value="gICAAA==" datatype="binary" />
<parm name="7" value="AAAAAA==" datatype="binary" />
<parm name="8" value="AAAAAA==" datatype="binary" />

 

其中parm  是它的項的註冊表順序值,我們在windows mobile的documentation裡可以看到這些順序值,例如:

Registry Order Shell Color Description

0

COLOR_ALERT

Obsolete.

1

COLOR_ACCENTTEXT

Obsolete.

2

COLOR_CALOFFHOURS

Obsolete.

3

COLOR_CALONHOURS

Obsolete.

4

COLOR_TODAYTEXT

Today screen text color.

等等。

 

 

HKEY_CURRENT_USER/Software/Microsoft/Today/Skin  這裡是我們當前所選的主題路徑

 

OEM可以從不同的註冊表位置中改變主題:

 

  • HKEY_CURRENT_USER/Software/Microsoft/Today/Skin
  • HKEY_CURRENT_USER/Software/Microsoft/Today/UseStartImage
  • All values under HKEY_CURRENT_USER/Software/Microsoft/Today/<ThemeFileName>
  • HKEY_LOCAL_MACHINE/Software/Microsoft/Color/SHColor
  • HKEY_LOCAL_MACHINE/Software/Microsoft/Color/BaseHue
  • All values under HKEY_LOCAL_MACHINE/Software/Microsoft/Color/<ColorNumber>
  • HKEY_LOCAL_MACHINE/System/GWE/SysColor
  •  

    我們上面是對於HKCU/Software/Microsoft/Today/UMU.tsk和 HKEY_LOCAL_MACHINE/Software/Microsoft/Color/SHColor 這個下面進行設定。

     

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.