Symbian按键监听(Monitor key console)

来源:互联网 发布:http post数据 编辑:程序博客网 时间:2024/04/30 06:29
本文转至自己的blog:http://blog.sina.com.cn/wentaowu 以后会做到同步更新

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() );    一定要把这句注掉
}
原创粉丝点击