Symbian开发——模拟键盘按键

一、简单说明一下Symbian OS处理按键的流程:

Symbian OS是一个事件驱动的系统,所有的应用程序和服务都可以被看作是事件处理器。

当用户按下一个键后,keyboard hardware就会生成一个中断,由keyboard driver捕捉,之后分解出这次按键事件的key code,然后driver将它发送到系统端的一个线程——被称为window server,而window server又会把它发向在window group中拥有焦点的那个应用程序中,这个步骤是使用一个control environment(CONE)来完成的,它是window server和user interface library之间的一个API函数。

这时到了应用程序端了,这里key events被OfferKeyEventL函数(由window server所调用)所处理,每次按下键都会产生三个不同的事件,第一个事件是EEventKeyDown,它是当一个键被按下后发生的,接着是EEventKey,我们通常对这个事件最感兴趣,最后是当按键松开后的EEventKeyUp,这些事件的类型都在TEventCode枚举类型中被指明,它也是传递到OfferKeyEventL中的第二个参数,第一个是一个结构,TKeyEvent,它提供了更多的关于本次事件的信息。

如果一个键被按下后持续超过0.8秒,那window server就会发送另一个EEventKey到该程序,这就是长按键事件(long key press event);如按键的时间超过了那个限度,则认为这是一次重复按键事件,window server会在每隔0.25秒就发送key repeat events。这些时间的间隔定义都是s60的缺省值,可以在程序中改变的。

TKeyEvent有一个成员变量,iRepeats,它可以用来分辨是长按键事件还是重复按键时间。总的来说,如果要分辨最后那一次按键事件的类型,可以查看iRepeats,如果为0,那就是长按键事件,如果不是就是重复按键事件。这里iRepeats是一个32位的带符号整数。因为大部分的按键事件都会及时处理,所以这个变量并没有定义实际重复按键的次数,如果想要知道有多少键被重复按下,应用程序就要自己来计算重复按键的次数了。

 

二、按键事件

OfferKeyEventL函数的第一个参数是TKeyEvent,它有四个成员:iCode,iScanCode,iModifiers,iRepeats。

模拟键盘按键需要创建一个时间,即TKeyEvent。

键盘码在e32keys.h中的EKeyCode中枚举。

 

三、模拟键盘按键的方法:

模拟键盘按键的方法有几种:TKeyEvent、TWsEvent、TApaTask、TRawEvent、SimulateRawEvent。这里只说明TKeyEvent的方法,多种方法请参考Nokia论坛http://wiki.forum.nokia.com/index.php/Simulate_a_keypress 

1. 数字和字母(例如“a”)

在EKeyCode没有定义数字和字母的键值,使用ASCII码即可。

SendSimulateKeyEvent( 'a' )或SendSimulateKeyEvent( '1' )

 

voidSendSimulateKeyEvent( TChar aChar )

{

RWsSession wsSession = CCoeEnv::Static()->WsSession();

TKeyEvent keyEvent;

keyEvent.iCode = aChar;

keyEvent.iScanCode = aChar;

keyEvent.iModifiers = 0;

keyEvent.iRepeats = 0;

wsSession.SimulateKeyEvent(keyEvent);

wsSession.Flush();

}

 

2. EKeyCode枚举的键值

以向上键为例。

 

          keyEvent.iCode = EKeyUpArrow;

         keyEvent.iScanCode = EStdKeyUpArrow;

         keyEvent.iModifiers = 0;

         keyEvent.iRepeats = 0;

         wsSession.SimulateKeyEvent(keyEvent);

         wsSession.Flush();

 

四、需要的library和capability

RWsSession需要的头文件和库是:

Location: W32STD.H
Link against: ws32.lib

 

SimulateKeyEvent这个API需要的Capability是SW Event,这个需要开发者证书,普通的自签名证书在Device上是不能运行的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值