Symbian按键监听(Monitor key console)

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() );    一定要把这句注掉
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值