關於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",也即五位描述符長度的內容。對於第二種和第三種情況,我是百思不得其解,爲什麼傳執行文件名就可以,而傳完整路徑就是不行。
好了,暫時小結到這裏。好久沒更新空間,今天就上來碼幾個字。