如何使后台运行的程序获取按键事件

简介: 一、基本思路: 首先程序运行时注册按键事件,然后将程序转入后台运行,当按键事件发生后在AppUi的HandleKeyEventL中处理。
一、基本思路: 

首先程序运行时注册按键事件,然后将程序转入后台运行,当按键事件发生后在AppUi的HandleKeyEventL中处理。 

相关代码如下: 

void CClockSSAppUi::SetCaptureKey() 

    // If there is another handle, we have to cancel it first. 
    CancelCaptureKey(); 
    // This will capture scan code of the keypress. 
    iHandleCaptureKey = CCoeEnv::Static()-> RootWin().CaptureKeyUpAndDowns( 
      KOkKeyScanCode, EModifierShift, EModifierShift PRIORITYCAPTUREKEY); 

    //// WARNING: We need to capture the normal code of keypress otherwise 
    // the key event will be sent to another application. 
    iHandleCaptureKey2 = CCoeEnv::Static()-> RootWin().CaptureKey( 
      KOkKeyCode, EModifierShift, EModifierShift PRIORITYCAPTUREKEY); 



TKeyResponse CClockSSAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) 

if ((KOkKeyScanCode == (TUint) aKeyEvent.iScanCode) && (EEventKeyDown == aType) 
          && ((aKeyEvent.iModifiers & EModifierShift) == EModifierShift) ) 
          { 
          CAknGlobalNote* globalNote = CAknGlobalNote::NewLC(); 
          globalNote->ShowNoteL(EAknGlobalInformationNote, _L(”Captured KEY!”)); 
          CleanupStack::PopAndDestroy(); 
          } 



需要注意的是:如果你的是多view程序,并且调用了AppUi::AddToStackL接收按键事件,那么在这些控件OfferKeyEventL的处理中对于不相关的键事件一定要返回EKeyWasNotConsumed,好让AppUi最后能处理。 

二、如何将程序送到后台运行 


比如说,当按下back后,在HandleCommandL()中加入如下处理: 
case EAknSoftkeyBack: 
            { 
            TApaTask apaTask(iEikonEnv->WsSession()); 
            apaTask.SetWgId(CCoeEnv::Static()->RootWin().Identifier()); 
            apaTask.SendToBackground(); 
            break; 
            } 


解释一下: 
A task is a running application. 
A task is identified by its association with the running application’s window group. 
apaTask把自己送到后台,并在后台继续运行。 


目录
相关文章
|
10月前
|
Unix Linux Shell
查看后台运行的命令 、进程状态、关闭前后台命令
查看后台运行的命令 、进程状态、关闭前后台命令
一种切实可行的后台执行脚本方法——利用VB脚本隐藏CMD命令窗口
一种切实可行的后台执行脚本方法——利用VB脚本隐藏CMD命令窗口
331 0
C++ 关闭窗口并杀掉进程
C++ 关闭窗口并杀掉进程
331 0
|
C#
c#代码启动任务管理器的几种方法
原文:c#代码启动任务管理器的几种方法 1.直接启动 ProcessStartInfo info = new ProcessStartInfo(); info.
1703 0
|
Shell Android开发 Windows
通过adb shell命令查看当前与用户交互的activity
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 在做android逆向的时候,有时候会需要知道当前的界面处于哪个Activity,这时候就可以使用adb shell命令来查看当前与用户交互的Activity名称。
2974 0
|
Python
Python 技术篇-pyhook暂停键盘鼠标监听事件,停止键盘鼠标监听事件且不关闭程序
Python 技术篇-pyhook暂停键盘鼠标监听事件,停止键盘鼠标监听事件且不关闭程序
412 0
|
Java 应用服务中间件 数据安全/隐私保护