Symbian按键监听(Monitor key console)
HI,这几天研究动态主题。总算功能差不多完成。准备本周进行测试了。相当Happy!!
明天公司举行为期五天的台湾旅游活动。真是太爽了。呼呼但是我不能参加so fuck!!哈哈
但是还是为那些能去旅游的同事们带上祝福,希望他们能玩好,玩的开心,安全回家!!
今天遇到了这样一个问题。程序在后台需要监听按键事件。
另外还有设置全屏处理。
下面我们来看看按键监听处理。
1初始化需要监听的按键
void CmyPhoneAppUi::InitKey()
{
//用于程序在后台式相应按键
iEikonEnv->RootWin().CaptureKey(63587,0,0);
iEikonEnv->RootWin().CaptureLongKey(63587,63587, 0, 0,2000000000,
ELongCaptureNormal);//63587:挂机键
//iEikonEnv->RootWin().CaptureKey(63499,0,0);
//iEikonEnv->RootWin().CaptureLongKey(63499,63499, 0, 0,2000000000,
ELongCaptureNormal);//63499:笔形键
iEikonEnv->RootWin().CaptureKey(63570,0,0);
iEikonEnv->RootWin().CaptureLongKey(63570,63570, 0, 0,2000000000,
ELongCaptureNormal);//63570:菜单键
iEikonEnv->RootWin().CaptureKey(63586,0,0);
iEikonEnv->RootWin().CaptureLongKey(63586,63586, 0, 0,2000000000,
ELongCaptureNormal);//发射键
iEikonEnv->RootWin().CaptureKey(8,0,0);
iEikonEnv->RootWin().CaptureLongKey(8,8, 0, 0,2000000000, ELongCaptureNormal);//C键
iEikonEnv->RootWin().CaptureKey(63557,0,0);
iEikonEnv->RootWin().CaptureLongKey(63557,63557, 0, 0,2000000000,
ELongCaptureNormal);//OK键
iEikonEnv->RootWin().CaptureKey(63497,0,0);
iEikonEnv->RootWin().CaptureLongKey(63497,63497, 0, 0,2000000000,
ELongCaptureNormal);//上键
iEikonEnv->RootWin().CaptureKey(63498,0,0);
iEikonEnv->RootWin().CaptureLongKey(63498,63498, 0, 0,2000000000,
ELongCaptureNormal);//下键
iEikonEnv->RootWin().CaptureKey(63496,0,0);
iEikonEnv->RootWin().CaptureLongKey(63496,63496, 0, 0,2000000000,
ELongCaptureNormal);//左键
iEikonEnv->RootWin().CaptureKey(63458,0,0);
iEikonEnv->RootWin().CaptureLongKey(63458,63458, 0, 0,2000000000,
ELongCaptureNormal);//右键
}
2重载HandleKeyEventL
TKeyResponse CmyPhoneAppUi::HandleKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
{
if (aType == EEventKey)
{
//记得把按键信息传回去
RWsSession iWsSession;
User::LeaveIfError(iWsSession.Connect());
TInt wgId = iWsSession.GetFocusWindowGroup(); //获取当前界面ID
CApaWindowGroupName* gn = CApaWindowGroupName::NewLC(iWsSession, wgId);
TUid uid = gn->AppUid();
TWsEvent event;
event.SetType( EEventKey );
event.SetTimeNow();
event.Key()->iCode = aKeyEvent.iCode;
event.Key()->iModifiers = aKeyEvent.iModifiers;
event.Key()->iRepeats = aKeyEvent.iRepeats;
event.Key()->iScanCode = aKeyEvent.iScanCode;
iWsSession.SendEventToWindowGroup(wgId,event);
CleanupStack::PopAndDestroy(); //gn
iWsSession.Close();
//
这里可以处理监听到的按键
}
//必须返回值,不要拦截系统的按键消息
return EKeyWasNotConsumed;
}
另外做全屏处理时,有一点需要注意:
在 CmyPhoneAppUi::ConstructL()中
{
BaseConstructL();
StatusPane()->MakeVisible(EFalse);//隐藏TITLE
Cba()->MakeVisible(EFalse); // 隐藏按键
}
void CmyPhoneAppUi::HandleStatusPaneSizeChange()
{
//iAppView->SetRect( ClientRect() ); 一定要把这句注掉
}
明天公司举行为期五天的台湾旅游活动。真是太爽了。呼呼但是我不能参加so fuck!!哈哈
但是还是为那些能去旅游的同事们带上祝福,希望他们能玩好,玩的开心,安全回家!!
今天遇到了这样一个问题。程序在后台需要监听按键事件。
另外还有设置全屏处理。
下面我们来看看按键监听处理。
1初始化需要监听的按键
void CmyPhoneAppUi::InitKey()
{
//用于程序在后台式相应按键
iEikonEnv->RootWin().CaptureKey(63587,0,0);
iEikonEnv->RootWin().CaptureLongKey(63587,63587, 0, 0,2000000000,
ELongCaptureNormal);//63587:挂机键
//iEikonEnv->RootWin().CaptureKey(63499,0,0);
//iEikonEnv->RootWin().CaptureLongKey(63499,63499, 0, 0,2000000000,
ELongCaptureNormal);//63499:笔形键
iEikonEnv->RootWin().CaptureKey(63570,0,0);
iEikonEnv->RootWin().CaptureLongKey(63570,63570, 0, 0,2000000000,
ELongCaptureNormal);//63570:菜单键
iEikonEnv->RootWin().CaptureKey(63586,0,0);
iEikonEnv->RootWin().CaptureLongKey(63586,63586, 0, 0,2000000000,
ELongCaptureNormal);//发射键
iEikonEnv->RootWin().CaptureKey(8,0,0);
iEikonEnv->RootWin().CaptureLongKey(8,8, 0, 0,2000000000, ELongCaptureNormal);//C键
iEikonEnv->RootWin().CaptureKey(63557,0,0);
iEikonEnv->RootWin().CaptureLongKey(63557,63557, 0, 0,2000000000,
ELongCaptureNormal);//OK键
iEikonEnv->RootWin().CaptureKey(63497,0,0);
iEikonEnv->RootWin().CaptureLongKey(63497,63497, 0, 0,2000000000,
ELongCaptureNormal);//上键
iEikonEnv->RootWin().CaptureKey(63498,0,0);
iEikonEnv->RootWin().CaptureLongKey(63498,63498, 0, 0,2000000000,
ELongCaptureNormal);//下键
iEikonEnv->RootWin().CaptureKey(63496,0,0);
iEikonEnv->RootWin().CaptureLongKey(63496,63496, 0, 0,2000000000,
ELongCaptureNormal);//左键
iEikonEnv->RootWin().CaptureKey(63458,0,0);
iEikonEnv->RootWin().CaptureLongKey(63458,63458, 0, 0,2000000000,
ELongCaptureNormal);//右键
}
2重载HandleKeyEventL
TKeyResponse CmyPhoneAppUi::HandleKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
{
if (aType == EEventKey)
{
//记得把按键信息传回去
RWsSession iWsSession;
User::LeaveIfError(iWsSession.Connect());
TInt wgId = iWsSession.GetFocusWindowGroup(); //获取当前界面ID
CApaWindowGroupName* gn = CApaWindowGroupName::NewLC(iWsSession, wgId);
TUid uid = gn->AppUid();
TWsEvent event;
event.SetType( EEventKey );
event.SetTimeNow();
event.Key()->iCode = aKeyEvent.iCode;
event.Key()->iModifiers = aKeyEvent.iModifiers;
event.Key()->iRepeats = aKeyEvent.iRepeats;
event.Key()->iScanCode = aKeyEvent.iScanCode;
iWsSession.SendEventToWindowGroup(wgId,event);
CleanupStack::PopAndDestroy(); //gn
iWsSession.Close();
//
这里可以处理监听到的按键
}
//必须返回值,不要拦截系统的按键消息
return EKeyWasNotConsumed;
}
另外做全屏处理时,有一点需要注意:
在 CmyPhoneAppUi::ConstructL()中
{
BaseConstructL();
StatusPane()->MakeVisible(EFalse);//隐藏TITLE
Cba()->MakeVisible(EFalse); // 隐藏按键
}
void CmyPhoneAppUi::HandleStatusPaneSizeChange()
{
//iAppView->SetRect( ClientRect() ); 一定要把这句注掉
}