当AIR
启动后,监听全局键盘事件,即this.addEventListener( KeyboardEvent.KEY_DOWN, keydownHandler );
运行后效果:
当AIR
运行后,虽然正确监听了KeyboardEvent
.KEY_DOWN event,但是必须要鼠标点击一下AIR
才可以获取keydownHandler。
原因:
1、keydownHandler的获取需要监听的对象获得焦点,当mouse click AIR
后,则相当于获取焦点。
2、只有当监听的对象获取焦点后,才能出接收到KeyboardEvent
.KEY_DOWN event。
因此问题根结:
如何让监听对象自动获取焦点。
解决方案:(步骤)
1、
this.dispatchEvent
( new MouseEvent( MouseEvent.CLICK ));
通过以上的方式即可让程序“自动点击”dispatchEvent
的对象。
2、
获取焦点方式:
this.stage.focus
= this;
片段代码如下:
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
creationComplete="createCompleteHandler (event)">
private function createCompleteHandler( event : FlexEvent ) : void {
//监听ouseEvent.CLICK event
this.addEventListener( MouseEvent.CLICK, clickHandler );
//监听KeyboardEvent.KEY_DOWN
this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );
}
private function clickHandler( event : MouseEvent ) : void {
this.stage.focus
= this;
}
private function keyDownHandler( event : KeyboardEvent ) : void {
//TO DO
}
自动触发mouse click的代码:(以下代码在this.addEventListener( KeyboardEvent
.KEY_DOWN, keyDownHandler );的下面)
var timer : Timer = new Timer( 100, 1 );
timer.addEventListener( TimerEvent.TIMER_COMPLETE, function ( event : TimerEvent ) : void {
event.target.stop();
dispatchEvent
( new MouseEvent( MouseEvent.CLICK ));
});
timer.start();
之所以用timer来处理是因为当create complete后,直接使用dispatchEvent
会发现stage尚未赋值,因此需要延时一段时间处理。
注意:以上代码适用于AIR
,在Flex
里面按照如下写法仍旧无法获取KeyboardEvent
.KEY_DOWN event。
Flex
里面是如何自动获取焦点、监听全局键盘事件的呢?
原因:
Flex
由于有浏览器的包裹,因此当打开浏览器后,由于SWF
尚未获取焦点,因此就算自动获取了焦点(dispatchEvent
( new MouseEvent( MouseEvent.CLICK ));)也是没有意义的。
解决方法:
在嵌入SWF
的html里面加入如下的功能:
<body onload="document.getElementById('swf id').focus()">
这句话的含义:
当onload完毕后,自动设定SWF
为焦点状态。
最后再按照AIR
的写即可完成自动获取焦点、监听全局键盘事件。
分享到:
相关推荐
Electron中通过globalShortcut实现监听键盘事件进而实现快捷键功能示例代码;Electron中通过globalShortcut实现监听键盘事件进而实现快捷键功能示例代码
Java监听键盘事件可以通过使用Windows Hook机制来实现。通过设置键盘Hook,可以捕捉键盘按键事件,并将其传递给Java应用程序。Java应用程序可以通过JNI调用native方法来处理键盘事件。 四、Java监听鼠标事件 Java...
jquery 监听 键盘 事件
java开发的监听键盘事件,获取并显示键盘事件
windows后台监听键盘事件,使用hook(钩子)做的,记得先编hook.dll,再去编示例程序,hook.dll,会把监听到的按键写到hook文件夹下面的log.txt文件里面
在我们的项目经常需要监听一些键盘事件来触发程序的执行,而Vue中允许在监听的时候添加关键修饰符: <input v-on:keyup.13=submit> 对于一些常用键,还提供了按键别名: <input @keyup.enter=submit> ...
hook全局监听键盘事件
js监听键盘事件的方法_原生和jquery的区别详解.docx
1.注册监听键盘事件的通知 代码如下: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification objec
使用QT实现了全键盘监听。博客参考地址:https://blog.csdn.net/qq_37529913 邮箱:Dream.2017@qq.com 有疑问可以博客地址下留言,谢谢下载。
Linux下使用C语言实现监听键盘输入的功能。
能在窗口不是活动状态下捕获键盘事件
在写网页的时候,常常需要监听键盘事件,让我们来看看如何实现吧。 监听方式 键盘事件往往是全局监听,设监听的函数为keyboard()。 keyup事件类型。该类型触发条件为按键按下去并松开。 //长按并松开只触发一次 ...
该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我...
代码如下: [removed] var isPiss=0; [removed]=function(event){ var e = event || window.event || arguments.callee.caller.arguments[0]; if(e && e.keyCode==27){ // 按 Esc //要做的事情 } if(e && e.keyCode==...
VB源码,键盘捕捉程序,比较不错,可以看看。
我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在...