突破SBO屏蔽限制,自由实现快捷键自定义

  这个标题很耸动?的确是这样,不知出于什么样的考虑,SBO龌龊的屏蔽了所有的功能键,包括F1-F12、上下左右箭头键、HOME键、END键、PAGEDOWN键、PAGEUP键、CTRL键、ALT键等等--可能是因为它自己定义了一些这样的按键作为快捷方式吧。

  但是用户可不是那么好说话!一个基于SBO的项目中,用户竟然一定要坚持在车间业务中">使用功能键以期达到只要通过键盘就能够实现业务操作。我以SBO屏蔽了功能按键为由,希望用户能够不坚持需要的这些需求,的确SBO甚至在UI开发中都屏蔽了这些功能。但是用户却一定要求这样的解决方式!该死的需求,该死的SBO!

  于是潜心钻研,终于两天之后的今天,完成了这一需求--完全突破了SBO的限制,在SBO 中自由使用所有的系统按键--就是说,全部接管了所有的功能键。如果我愿意,SBO要实现固有的系统功能快捷方式,必须向我借阅。

  一、实现效果

  先看看实现的界面吧。在没有打开SBO的窗体时,SBO其实已经打开了几个非视化窗体,比如F_4,这个时候,我们要能够捕捉到按键。嗯,是的,我们捕捉到了--

  对,这是无窗体情况下捕捉到了操作人员按下的F5按键。那么其它按键呢?请看--

  无窗体情况下捕捉到了操作人员同时按下的CTRL键和P键。

  上述两种方式的实现,其意义在于可以通过快捷方式自定义打开任意的一个当前有效的SBO业务功能,当然也包括所有的第三方增强模块的业务实现。

  那么在业务界面中呢?当然是可以实现的。如下图:

  至于在系统业务界面中的实现也是类似的效果,这种界面就不在此显示了。

  二、实现技术

  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的系统功能或者扩展功能的快捷方式。

  三、功能扩展

  按键被捕捉到了,也通过程序考发框架传到指定的窗体,剩下的就是具体的业务实现了。

  怎么做?程序员都知道了!

  本文出自 “富盛软件” 博客,请务必保留此出处http://foresun.blog.51cto.com/221037/113958

时间: 2024-12-27 13:09:17

突破SBO屏蔽限制,自由实现快捷键自定义的相关文章

C# WinForm中实现快捷键自定义设置实例_php技巧

本文源码下载:http://xiazai.jb51.net/201501/tools/cs-key-setting.rar 项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示: 当我们相继按下Ctrl+Alt+M的时候,软件就会自动将快捷键显示在文本框中. 最终的效果如下图所示: 核心代码如下所示: 复制代码 代码如下: private void keyDown(object sender, KeyEventArgs e) {     StringBuilder ke

突破IE屏蔽限制,自己的网站使劲弹新IE窗口

写这篇文章并不是要告诉垃圾广告商可以尽情弹出广告或者后台隐藏弹出窗口,而是提醒大家IE内核还有一些冬冬可以绕过大多数以IE为内核的浏览器的广告屏蔽功能,甚至绕开这些浏览器本身,直接弹出一个真正的Internet Explorer窗口.当然并不是全部,有的还是做的比较好的,如Maxthon,尽管新窗口打开了,但是仍然存在于Maxthon之中,而不会砰地弹出一个IE在后台放着,但是TT.The World等一些浏览器就不行了,能直接打开为新的IE窗口.自古都是一物降一物,希望能有相应的解决办法. 原

Win7 如何屏蔽全角/半角快捷键

  Win7里面通过系统无法删除这个全角/半角切换快捷键,解决方法: 在一个项目组里,你会发现,不同的人,生活习惯不都是一样的:使用xp和使用win7的人,就有很多差别,像在使用快捷键方面.windows下的输入法,有一个"全/半角切换"的快捷方式"Shift+Space". 我们可以通过以下方式查看到: "开始"->"控制面板"->"区域和语言"->"键盘和语言"-&

屏蔽F1~F12的快捷键的js函数_javascript技巧

复制代码 代码如下: function window.onhelp(){return false} //屏蔽F1帮助 /*keyCod从113-123分别禁用了F2-F12键,13禁用了回车键(Enter),8禁用了退格键(BackSpace)*/ document.onkeydown = function(){ if(window.event && window.event.keyCode == 113) { window.event.keyCode = 505; } if(window

突破单位屏蔽上QQ

问题描述 最近单位把QQ等聊天工具都屏蔽掉了,现在只能浏览普通网页,连视频也无法观看.想用代理上QQ,利用家里的宽带网络寻找了几个免费的QQ代理,测试也课用,可到了单位就行不通,说无法连接到代理服务器,回家又试了下,家里可行.为什么单位不行呢?和端口有关么?寻求帮助解答,谢谢! 解决方案 解决方案二:是需要添加你们公司的代理服务器/打开IE,工具-->选项-->连接-->LAN的设定-->详细设计-->例外/ok!dir就到这里了,然后在里面加上你们公司的服务器地址段/不如倪

怎样屏蔽浏览器关闭按钮及ALT+F4 快捷键

按钮|浏览器 屏蔽Alt+F4等快捷键:<script>function KeyDown(){ //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键 //alert("ASCII代码是:"+event.keyCode);  if ((window.event.altKey)&&      ((window.event.keyCode==37)||   //屏蔽 Alt+ 方向键 ←       (window.event.keyCode==3

怎样禁用win7系统的全/半角切换快捷键

在我们使用的win7系统上,可以直接使用Shift+Space快捷键进行"全/半角切换".每个用户都会有自己的操作习惯,有用户习惯使用快捷键操作,也有用户不习惯使用快捷键操作.比如Shift+Space快捷键可以快速切换"全/半角",有用户反映在通过快捷键切换"全/半角"没有任何响应.这边小编将以win7 64位系统为例,带大家一起了解下如何屏蔽全角/半角快捷键的方法! 方法如下: 1.在win7系统开始菜单上,依次点击"控制面板&qu

Qt Creator快捷键

简介 Qt Creator中提供了各种快捷键来加快开发进程. 如果需要查看或自定义快捷键,选择工具->选项->环境->键盘.快捷键按类别列出,可以在过滤器(Filter)处输入命令名称.标签名称或快捷键名称,来快速定位想要查找的快捷键. 以红颜色显示的快捷键与某些功能相关联.Qt Creator可以在当前上下文中执行该功能.如果几个功能用同一个快捷键,那么就会产生冲突,Qt Creator不会执行任何功能. 键盘快捷键也可能与窗口管理器使用的快捷键冲突.这种情况下,Qt Creator的

JavaScript 快捷键设置实现代码_javascript技巧

屏蔽Alt+F4等快捷键: 复制代码 代码如下: <script> function KeyDown(){ //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键 //alert("ASCII代码是:"+event.keyCode); if ((window.event.altKey)&& ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ← (window.event.keyCode==39))){ //