1. 定位当前程序,并将当前程序的优先级调高
TInt prio = 1001; //设置一个较高的值
//将当前程序的窗口组设计一个高的优先级,并置为同级最前
CEikonEnv::Static()->RootWin().SetOrdinalPosition(0, prio);
2.将当前程序的窗口组设置为最前, 可与HandleForegroundEventL 配合使用,使当前程序使终处于最前(条件是优先级要有足够高,否则的话还是会被优先级更高的程序抢占)
RWsSession ws = CEikonEnv::Static()->WsSession();
TApaTaskList tlist(ws);
TApaTask task = tlist.FindApp(KUidMyApp); //KUidMyApp 是指要调高优先级的程序的ID
task.BringToForeground();
或者是:
TApaTaskList taskList(CCoeEnv::Static()->WsSession());
TApaTask currentTask = taskList.FindByPos(0);
TApaTask ourAppTask = taskList.FindApp(KUidNightClockApp);
if(currentTask.ThreadId() != ourAppTask.ThreadId())
ourAppTask.BringToForeground();
3.模拟一个按键消息,并发向指定窗口组
RWsSession sess=CCoeEnv::Static()->WsSession();
TWsEvent event;
TInt id=sess.FindWindowGroupIdentifier( 0, _L("*Phone?") ); //取得电话程序的窗口组
event.SetType(EEventKey);
event.SetTimeNow();
event.Key()->iCode = EKeyDownArrow; //模拟一个向下的箭头按键
event.Key()->iModifiers = 0;
event.Key()->iRepeats = 0;
event.Key()->iScanCode = EStdKeyNull;
sess.SendEventToWindowGroup( id, event ); 将模拟的按键消息发给窗口组