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 ); 将模拟的按键消息发给窗口组 |