/*=========================================================
// 开启指定第三方程序
Location: apgcli.h
Link against: apgrfx.lib
Class RApaLsSession
Location: APACMDLN.H
Link against: apparc.lib
Class CApaCommandLine
Location: apgtask.h
Link against: apgrfx.lib
Class TApaTask
//=======================================================*/
//STEP 1 设定第三方程序路径和UID.
TFileName appFN; //文件名,如a.app / a.exe
TFileName appFullFN; //全文件名,如c:/system/apps/a.app.
GetAppFullName(appFullFN);
GetAppName(appFN);
TUid appUid; // UID形如0x382498f1.
GetAppUid(appUid);
// 检测程序文件是否存在
#if defined(__SERIES60_30__) || defined(__SERIES60_3X__)
// 在3rd上,直接检测文件是否存在总是失败,故跳过。
if (ETrue)
#else//defined(__SERIES60_30__) || defined(__SERIES60_3X__)
if (NFileHelper::FileIsExist(appFN) == KErrNone)
#endif//defined(__SERIES60_30__) || defined(__SERIES60_3X__)
{
// 检测第三方程序是否已经启动
TApaTaskList apaTaskList(CCoeEnv::Static()->WsSession());
TApaTask appTask = apaTaskList.FindApp(appUid);
if (appTask.Exists())
{
//STEP 2 如果第三方程序已经运行,根据需求作一些特殊处理
//TODO...
}
//STEP 3 无论第三方程序是否正在运行,均可通过Startdocument启动或切换到前台。
RApaLsSession ls;
if(ls.Connect() == KErrNone)
{
TThreadId dummyid;
RApaLsSession ls;
if (ls.Connect() == KErrNone)
{
# if defined(__SERIES60_30__) || defined(__SERIES60_3X__)
// 在3rd上直接用文件名启动
CApaCommandLine* cmdLine=CApaCommandLine::NewL();
cmdLine->SetCommandL(EApaCommandRun);
cmdLine->SetExecutableNameL(appFN); // 只需要一个文件名即可,如exam.exe
TInt err = ls.StartApp(*cmdLine);
delete cmdLine;
cmdLine = NULL;
# elif defined(__WINS__) // 2版模拟器
// 在2rd模拟器上用UID启动
_LIT(filen, ""); // dummy
TInt err = ls.StartDocument(filen, appUid, dummyid);
# else
// 在1rd,2rd真机上,用全路径文件名启动
TInt err = ls.StartDocument(appFullFN, dummyid);
# endif//defined(__SERIES60_30__) || defined(__SERIES60_3X__)
if (err == KErrNone)
{
// 启动成功
}
}
ls.Close();
// 给程序启动时间 2s
User::After(1000000);
}
}
[Howto]在Symbian程序中启动第三方程序
最新推荐文章于 2022-02-25 21:57:21 发布