franksunny的个人技术空间
获得人生中的成功需要的专注与坚持不懈多过天才与机会。 ——C.W. Wendte

 

关于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 阅读(1595) 评论(0)  编辑 收藏 引用 所属分类: symbian 开发

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



常用链接

留言簿(13)

随笔分类

个人其它博客

基础知识链接

最新评论

阅读排行榜

评论排行榜