關于3rd程序啟動是參數的小結
在Symbian 3rd手機上對于GUI程序的啟動方式可以采用安裝時自啟動、開機自啟動、編碼啟動和點擊功能表圖標的方式啟動,有很多軟件往往對采用何種方式啟動需要做些前后臺以及其它相關的處理方式,那么如何識別目前的GUI程序是何種啟動呢?
方法就是通過重載GUI框架的C*AppUi:: ProcessCommandParametersL (CApaCommandLine &aCommandLine)函數(該函數還有其它重名函數,這里只對最簡單的形式進行解析,拋磚引玉),對其入參進行識別來判斷是何種形式的自啟動。下面對我試驗中的幾種情況給出示例,方便以后查詢。
1、安裝時啟動,即pkg中標記為FR,RI標記的啟動方式
在C*AppUi::ProcessCommandParametersL中入參的
aCommandLine.OpaqueData().Length()為0
2、通過Startup List開機自啟動的方式
結果參數與1同
3、通過點擊程序圖片啟動
在C*AppUi::ProcessCommandParametersL中入參的
aCommandLine.OpaqueData().Length()為1,具體符號,搞不出來,反正是ASCII碼值為1的那個符號
4、代碼編程啟動
試過三種方式:
第一種
const TUid KAppUid={0x2CC2D30E};
TThreadId app_threadid;
RApaLsSession ls;
User::LeaveIfError(ls.Connect());
TInt err=ls.StartDocument(KNullDesC, KAppUid, app_threadid);
ls.Close();
結果同3
第二種
RApaLsSession apaLsSession;
User::LeaveIfError(apaLsSession.Connect());
CleanupClosePushL(apaLsSession);
TApaAppInfo appInfo;
TInt retVal = apaLsSession.GetAppInfo(appInfo, aAppUid);
if (retVal == KErrNone)
{
CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
cmdLine->SetCommandL(EApaCommandRun);
cmdLine->SetExecutableNameL(appInfo.iFullName);
_LIT8(KExitDesC,"start");
cmdLine->SetOpaqueDataL(KExitDesC);
User::LeaveIfError(apaLsSession.StartApp(*cmdLine));
CleanupStack::PopAndDestroy(cmdLine);
}
else
{
// The application not found!
}
CleanupStack::PopAndDestroy(&apaLsSession);
結果還是同3
第三種
_LIT8(KExitDesC,"start");
CApaCommandLine *cmd=CApaCommandLine::NewLC();
cmd->SetCommandL(EApaCommandRun);
cmd->SetExecutableNameL(_L("start.exe"));
cmd->SetOpaqueDataL(KExitDesC);
RApaLsSession als;
User::LeaveIfError(als.Connect());
CleanupClosePushL(als);
User::LeaveIfError(als.StartApp(*cmd));
CleanupStack::PopAndDestroy(2);
結果與上述就不一樣了,aCommandLine.OpaqueData()內容就是"start",也即五位描述符長度的內容。對于第二種和第三種情況,我是百思不得其解,為什么傳執行文件名就可以,而傳完整路徑就是不行。
好了,暫時小結到這里。好久沒更新空間,今天就上來碼幾個字。
posted on 2010-03-26 17:10
frank.sunny 閱讀(1645)
評論(0) 編輯 收藏 引用 所屬分類:
symbian 開發