这个标题很耸动?的确是这样,不知出于什么样的考虑,SBO龌龊的屏蔽了所有的功能键,包括F1-F12、上下左右箭头键、HOME键、END键、PAGEDOWN键、PAGEUP键、CTRL键、ALT键等等--可能是因为它自己定义了一些这样的按键作为快捷方式吧。
 
但是用户可不是那么好说话!一个基于SBO的项目中,用户竟然一定要坚持在车间业务中使用功能键以期达到只要通过键盘就能够实现业务操作。我以SBO屏蔽了功能按键为由,希望用户能够不坚持需要的这些需求,的确SBO甚至在UI开发中都屏蔽了这些功能。但是用户却一定要求这样的解决方式!该死的需求,该死的SBO!
 
于是潜心钻研,终于两天之后的今天,完成了这一需求--完全突破了SBO的限制,在SBO 中自由使用所有的系统按键--就是说,全部接管了所有的功能键。如果我愿意,SBO要实现固有的系统功能快捷方式,必须向我借阅。
 
一、实现效果
 
先看看实现的界面吧。在没有打开SBO的窗体时,SBO其实已经打开了几个非视化窗体,比如F_4,这个时候,我们要能够捕捉到按键。嗯,是的,我们捕捉到了--
突破SBO屏蔽限制,自由实现快捷键自定义_第1张图片
 
对,这是无窗体情况下捕捉到了操作人员按下的F5按键。那么其它按键呢?请看--
突破SBO屏蔽限制,自由实现快捷键自定义_第2张图片
 
无窗体情况下捕捉到了操作人员同时按下的CTRL键和P键。
 
上述两种方式的实现,其意义在于可以通过快捷方式自定义打开任意的一个当前有效的SBO业务功能,当然也包括所有的第三方增强模块的业务实现。
 
那么在业务界面中呢?当然是可以实现的。如下图:
突破SBO屏蔽限制,自由实现快捷键自定义_第3张图片
 
至于在系统业务界面中的实现也是类似的效果,这种界面就不在此显示了。
 
二、实现技术
 
OK,效果看到了。那么怎么实现的呢?
 
深入了解Windows平台下的开发人员肯定已经知道了我们是怎么实现的了。对,通过HOOK方式来实现,在富盛SBO程序开发框架中,我们加入了启动底层功能监听的部分功能:比如包括监听MOUSE和键盘,当然也可以监听网络信息。富盛SBO程序开发框架启动了底层设备HOOK之后,并要求对监听HOOK进行必要的配置。这是应该的,否则将可能导致系统监听成本的加剧,所以,一个成熟的程序应该对监听内容进行过滤。
 
富盛SBO程序开发框架提供以下几种监听过滤方式:
1、监听宿主过滤器。指定对那些进程进行监听,以及监听到的信息应该提交给谁。
2、监听对象过滤器。监听对象包括鼠标、键盘,目前还没有开放网络信息的监听。
3、监听事件过滤器。监听哪些对象,以按键监听为例:是否单独监听F1-F12等系统按键;是否单独监听CTRL、ALT、SHIFT功能;可打印字符键是否必须同CTRL、ALT、和SHIFT按键搭配使用才允许被监听等。
 
富盛SBO程序开发框架的按键监听程序还有一项非常重要的功能,就是监听对象被捕获程序处理之后,是否还允许其它程序处理本对象。是的,如果不予其它程序共享,SBO也就只能乖乖的听命于我们,这些按键也就乖乖的举起手来听从我们的指挥了。SBO要使用这些按键,只能像咱们求助了。
 
其实这只是接管SBO系统按键的第一步,这还没有算完。
 
按键被捕捉到了,传递给我们的程序处理--在此,以富盛SBO程序开发框架为例。因为,富盛SBO程序开发框架采用的是集中调度、分布分发的体系结构,所以按键监听程序将监听信息传递给富盛SBO程序开发框架之后,由框架进行综合调度,调度的原则是:
 
1、活动窗体是否是基于富盛SBO程序开发框架的窗体,进入到富盛SBO程序开发框架程序进行处理;
 
这个时候可以在用户窗体上进行相关的业务处理,比如POS处理等。
 
2、活动窗体是否是SBO系统窗体,由基于富盛SBO程序开发框架的系统窗体监视程序负责处理;
 
这个时候可以在自己开发的扩展程序来处理系统窗体上进行相关的业务处理,比如销售订单处理等。
 
3、既无用户窗体业务SBO系统窗体,那么富盛SBO程序开发框架启动SBO应用框架监视程序。
 
这个功能前面已经讲过,在于接管SBO的系统功能或者扩展功能的快捷方式。
 
三、功能扩展
 
按键被捕捉到了,也通过程序考发框架传到指定的窗体,剩下的就是具体的业务实现了。
 
怎么做?程序员都知道了!