在程序中启动或关闭另一个程序

TO Start it:

for Symbian 8 and earlier :

 

#include <eikdll.h>
TInt err = EikDll::StartExeL(_L("c://system//apps//test.exe"));

for Symbian 9, for Server or Console application :

#include <apgcli.h> // link against apgrfx.lib
#include <apacmdln.h> // link against apparc.lib
 
TThreadId app_threadid
;
CApaCommandLine* cmdLine;
cmdLine
=CApaCommandLine::NewLC();
cmdLine->SetExecutableNameL(_L("test.exe"));
cmdLine->SetCommandL( EApaCommandRun );
RApaLsSession ls;
User::LeaveIfError(ls.Connect());
TInt err=ls.StartApp(*cmdLine,app_threadid);
ls.Close();
CleanupStack::PopAndDestroy(); // cmdLine

void  StartOtherApp()

{

    TUid appUid(TUid::Uid(0x02af1382));

 

    RApaLsSession ras;

    User::LeaveIfError(ras.Connect());

    CleanupClosePushL(ras);

   

    TApaAppInfo appInfo;

    ras.GetAppInfo(appInfo, appUid)

   

    CApaCommandLine *cmd = CApaCommandLine::NewL();

    cmd->SetLibraryNameL(appInfo.iFullName);

    cmd->SetCommandL(EApaCommandRun);

    ras.StartApp(*cmd);

   

    CleanupStack::PopAndDestory(cmd);

    CleanupStack::Pop();

    ras.Close();

  

}

 

for Symbian 9, for View-based application :

#include <apgcli.h> // link against apgrfx.lib
const TUid KAppUid={0x12345678};
_LIT(KDocName,"C://Data//document.txt");
TThreadId app_threadid;
RApaLsSession ls;
User::LeaveIfError(ls.Connect());
TInt err=ls.StartDocument(KDocName, KAppUid, app_threadid);
ls.Close();

for Symbian 9, RProcess :

_LIT(KMyExeFile,"test.exe");
_LIT(KMyExeFileCmd,"first_argument second third");
 
RProcess proc
;
User::LeaveIfError(proc.Create(KMyExeFile,KMyExeFileCmd));
// start the process running! Don't forget this.
proc.Resume();
proc.Close(); // Closes the handle, not the process.

To stop it

First, you need to find the process

 

On Symbian 9, process name is in the following format:

<name>[<UID3>]<instance number>

where: <name> - the name of executable or the name of Console - so remember it can be changed;

<UID3> - UID3 of executable, in lowercase HEX, 8 digits, always the same;

<instance number> - instance number, 4 digits, starting from 0001. For example name of kernel process is:

ekern.exe[100041af]0001

 

Killing:

Note: For S60 3rd Edition development, you are required the PowerMgmt capability to achieve this task.

TFindProcess processFinder(_L("test.exe*")); // by name, case-sensitive
//or
//TFindProcess processFinder(_L("*[12345678]*")); // by UID3
TFullName result;
RProcess processHandle;
while ( processFinder.Next(result) == KErrNone)
{
   User::LeaveIfError(processHandle.Open ( processFinder, EOwnerThread));
   processHandle.Kill(KErrNone);
   processHandle.Close();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值