第六課 WINCE捷徑詳解
1.WINCE捷徑結構
WINCE的捷徑和WIN2K,XP的不同,只是一個尾碼名為.LNK的文字檔.
其格式如下:
數字#路徑
比如,有個捷徑寫法如下:
23#/Windows/ToolViewer.exe
指的是指向WINDOWS檔案夾下的Toolviewer.exe可執行檔.數字究竟代表的是什麼意思,我也不太清楚;有一說法是#後的ACSII字元 的數量,但如果把上述例子改為1#/Windows/ToolViewer.exe也可正常運行,但去掉數字則系統無法識別.雖然可以正常使用,但建議還 是按照文檔#之後的ACSII字元數量填寫.
如果中間有空格,那麼應該加上雙引號,例如20#"/sys/My Documents"
2.如何把捷徑加到核心中
假設我們有一捷徑EnglishExp.lnk,要將其加到核心中.
在PB環境中開啟工程,在project.bib檔案的FILES欄位中添加:
EnglishExp.lnk $(_WINCEROOT)/PLATFORM/MyAPPC/EnglishExp.lnk NK H
其中 $(_WINCEROOT)指的是PC機子上PB安裝的根目錄,H指的是檔案屬性,意義代表如下:
S:系統
H:隱藏
R:壓縮的資源檔
C:壓縮檔
U:非壓縮檔
3.如何把捷徑放到案頭
文法如下:Directory(”欲拷貝至的檔案夾”):-File(”更改的名稱”,”要拷貝的檔案”)
假設我們有一捷徑EnglishExp.lnk,要將其放到案頭,並把捷徑的名稱改為”英語”
在PB的project.dat檔案加入此句:
Directory(”/Windows/LOC_DESKTOP_DIR”):-File(”英語.lnk”,”/Windows/CEnglishExp.lnk”)
包含在核心裡面的檔案全部釋放到”/Windows”檔案夾下.
LOC_DESKTOP_DIR指的是本地案頭.在PB中,常用的還有如下宏定義:
LOC_DESKTOP_DIR: 案頭
LOC_MYDOCUMENTS_DIR: My Documents
LOC_PROGRAMFILES_DIR: Program Files
LOC_FAVORITES_DIR: Favorites
LOC_RECENT_DIR: Recent
LOC_MYDOCUMENTS_DIR: My Documents
LOC_HELP_DIR: Help
更多的定義可以在ceshellfe.str檔案中找到
4.消除捷徑的小箭頭
在PC機的作業系統中可以通過修改註冊表來取消捷徑左下角的小箭頭,但在WINCE中註冊表沒有關於取消小箭頭的索引值(可能我沒找到^_^).在這裡我採用的是直接修改資源檔的做法.
開啟shcore.res檔案,其中文的路徑在 $(_WINCEROOT)/PUBLIC/COMMON/OAK/LIB/ARMV4I/RETAIL/0804/,然後將1205的ICO的小箭頭刪 掉即可.注意,不是刪除ID為1205的ICO表徵圖,是刪除ICO表徵圖中的內容.
5.微軟應用程式的捷徑
如果在PB中添加了微軟的應用軟體,便會在案頭和程式中添加其捷徑;如果覺得捷徑礙眼,可以將其注釋掉再編譯即可.
現在列出一些dat檔案中定義的微軟應用軟體的捷徑:
wceappsfe.dat (C:/WINCE420/PUBLIC/WCEAPPSFE/OAK/FILES/),內含:pmail,wordpad
wceshellfe.dat (C:/WINCE420/PUBLIC/WCESHELLFE/OAK/FILES/),內含:iexplore,協助文檔在”help”檔案夾的捷徑
viewers.dat (C:/WINCE420/PUBLIC/VIEWERS/OAK/FILES/), 內含:pdfviewer,imageviewer,Presviewer,Docviewer
directx.dat (C:/WINCE420/PUBLIC/DIRECTX/OAK/FILES/),內含:Media Player,DVD Player
6. 修改預設shell
其實讓一個程式在wince裡啟動和windows裡差不多,直接設定其為啟動項,這個有幾個方法。一個就是製作一個捷徑,指向我們的應用程式如app.exe,然後將捷徑放到/windows/startup下面。
步驟如下:(假設app.exe已經拷貝到windows下面)
在pb中建立一個檔案,檔案類型選txt,然後命名為.lnk尾碼,假設名字為test.lnk
編輯其內容為: 16#/windows/app.exe
備忘:前面的16是# 後面所有字元的總和,包括空格。Wince的協助文檔上說這麼定義就行,但是我嘗試後,最後down到目標機上面時提示找不到檔案,在wince裡查看這 麼建立的test.lnk的屬性,發現其指向/windows/app.exe後面還有兩個方框,因此不對,我的解決方案是修改test.lnk的內容為 16#”/Windows/app.exe”
編輯好lnk檔案內容後在pb中修改project.bib
在files段後面添加下面一行:(和添加別的檔案到image中類似,也要在pb的flatform菜單的setting下添加build語句,同上,不再贅述)
test.lnk $(_FLATRELEASEDIR)/test.lnk NK S
project.dat
增加下面一行:
Directory(”/Windows/startup”):-File(”test.lnk”,”/Windows/test.lnk”)
這樣後系統啟動後就會自動啟動我們的程式了。
另外一種方法是編輯註冊表:在project.reg中添加如下內容
[HKEY_LOCAL_MACHINE/init]
“Launch80″=”app.exe”
“Depend80″=hex:14,00,1e,00
這個是設定啟動順序,launch後面的數字越大的越是後啟動,Depend80後面的指定依賴項,為16進位,上面的語句表明依賴項為launch20 定義的device.exe和launch30中定義的gwes.exe, 注意Launch後面的數字範圍為0到99 ,此範圍之外的將不會有效果。
這樣兩種方法的效果都是系統都是系統先啟動資源管理員explorer.exe(就是看到的預設案頭),然後啟動我們的程式,(如果利用 taskman shell然後去掉工作列那麼效果更好)但是這樣還不夠,我們如何不顯示案頭,直接顯示我們的程式呢?
網上有人介紹的方法是去掉standard shell,但是我編譯總是報錯。我採用的方法是替換註冊表中lauch50中的explorer.exe為我的app.exe,即搞定。
修改註冊表的方法:先把帶KITL的系統跑起來,在PB的TOOLS->Remote registry editor裡修改,驗證有效後,再去修改platfrom.reg, 或者自己寫個REG檔案,然後在platform.reg裡INCLUDE進來 SYSGEN後確認PBWORKSPACE裡相關項目的REL目錄裡reginit.ini檔案裡包含了自己做的修改後make image然後DOWNLOAD下去就OK了。
值得補充的是,我們前面介紹的步驟中那個修改平台setting,添加語句的,是因為我每次都是重新sysgen和build,如果只是簡單的 make image的話(都是pb中的build OS菜單下的命令),那麼將直接用release中的內容,因此也可以直接將檔案放到release檔案夾,然後改project.bib等實現往 image中添加檔案。 同樣,也可以直接修改release中的shell.reg中的launch50值為我們自己的程式(或者類似修改reginit.ini檔案, reginit.ini檔案存放有所有wince的靜態註冊表,來達到去掉案頭,直接啟動我們程式的效果)。
注意,這麼啟動的程式,如果點擊關閉,就會死機的,因為沒有視窗運行了。實際運用中,當然不會讓使用者關閉我們的程式,除非他一起關閉系統。
如果也需要build的話,可以通過往image中添加檔案的方法將我們改好的shell.reg添加到release目錄。