最近參與項目,其中用到一些S60中的處理序間通訊功能,現總結部分使用方法:
1.通過一個命令列參數實現帶參數啟動應用程式:
//*啟動代碼, 在需要啟動一個程式時使用*/
//[1]定義命令列參數
CApaCommandLine *cmd=CApaCommandLine::NewLC();
//[2]設定命令類型
cmd->SetCommandL(EApaCommandRun);
//[3]設定要啟動的應用程式名稱
cmd->SetExecutableNameL(_L("HelloWorld.exe"));
//[4]設定參數,該參數為一個檔案名稱
cmd->SetDocumentNameL(_L("x.txt"));
//[5]設定參數,該參數為一個字串
cmd->SetTailEndL(_L8("message tail"));
//[6]啟動程式
RApaLsSession als;
User::LeaveIfError(als.Connect());
CleanupClosePushL(als);
User::LeaveIfError(als.StartApp(*cmd));
CleanupStack::PopAndDestroy(2);
//*在被啟動的應用程式中接收參數*/
//該功能通過在AppUik中重載CEikAppUi:: ProcessCommandParametersL方法實現。
TBool CHello2AppUi::ProcessCommandParametersL(TApaCommand aCommand,TFileName& aDocumentName,const TDesC8& aTail)
{
//接收啟動代碼中第[4]行參數
TFileName file = aDocumentName;
//接收啟動代碼中第[2]行參數
TApaCommand com = aCommand;
//接收啟動代碼中第[5]行參數
HBufC8* str = aTail.AllocL();
delete str;
}
2.通過StartDocument實現帶參數啟動應用程式:
//*啟動代碼, 在需要啟動一個程式時使用*/
RApaLsSession als;
TThreadId id;
TUid uid;
//被啟動程式UID
uid.iUid = 0xE469529F;
als.Connect();
als.StartDocument(_L("hello2.txt"), uid, id);
als.Close();
被啟動程式參數接收參考執行個體1中的參數接收。
3.通過RProcess實現帶參數啟動應用程式:
//*啟動代碼, 在需要啟動一個程式時使用*/
RProcess* process = new RProcess();
TUidType uidtype(KNullUid);
process->Create(_L("//sys//bin//HelloWorld.exe"), _L("teststring"), uidtype);
process->Resume();
process->Close();
delete process;
//*在被啟動的應用程式中接收參數*/
RBuf16 buf;
buf.Create(50);
User::CommandLine(buf); //buf=”teststring”
buf.Close();
4.通過TFindProcess實現尋找一個啟動的應用程式:
//要尋找的進程名稱
_LIT(KPROCESSNAME, "Hello2_0xE469529F*");
//構造進程搜尋對象
TFindProcess findProcess(KPROCESSNAME);
TFullName processName;
//開始搜尋應用程式,通過processName返回結果
findProcess.Next(processName);
if (processName == KNullDesC)
{
//尋找的應用程式未啟動
}
5.向一個啟動的應用程式發送訊息:
TUid uidApp = TUid::Uid(0xE469529F);
TApaTaskList taskList(CEikonEnv::Static()->WsSession());
TApaTask task = taskList.FindApp(uidApp);
TBuf<256> arg;
arg.Append(_L("my text"));
HBufC8* pBuf;
if(task.Exists())
{
//send message to the task; uid is not used, but it doesn's work.
pBuf = HBufC8::NewL(arg.Length());
TPtr8 ptr = pBuf->Des();
ptr.Copy(arg);
nErr = task.SendMessage(TUid::Uid( KUidApaMessageSwitchCreateFileValue ), *pBuf);
task.BringToForeground();
}
//*在被啟動的應用程式中接收參數*/
//該功能通過在AppUik中重載CEikAppUi:: ProcessMessageL方法實現。
void CHello2AppUi::ProcessMessageL(TUid aUid, const TDesC8 &aParams)
{
TUid u = aUid;
}
以上是總結的處理序間通訊的方法。未完。。。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/nie_feilong/archive/2010/01/18/5208892.aspx