主题:【原创】一个有趣的程序 -- 懒厨
入行多年,编程无数,只是有趣的程序却是罕见,上星期总算让我遇到一次,虽然只花了一天功夫,那种乐趣却是很少见的。
背景是这样的:
本单位有20几台PC,遍布全市各地,这些机器是特别定制的,在Windows XP上运行一个程序,连接两个显示器,其中一个是接触式液晶屏,显示最近的100条信息细节,可以做一些简单的操作。另外一个是40几寸的大电视,如果有紧急状况发生,而且是跟本地相关的,大电视就会显示,而且有声音警告发出,如果没有什么事情,大电视就显示时间。整个机器没有安装键盘,鼠标。
按IT部门的说法,是Mission Critical的机器,就是说机器和软件不能垮。那个软件是外包给悉尼的一家公司开发的,嘿嘿,他们的收费很贵。
先说说用户的要求,用户说,95%的时间,大电视无所事事,太浪费了,能否用来显示其他若干个相关软件的屏幕呢?反正只是显示,又不操作,没有键盘、鼠标没关系,应该很容易吧?
一开始,这个要求被拒绝了,按照合同,那台机器只能运行那个软件,否则外包公司不保证机器的可靠性,另外如果真的让这些机器运行那些相关软件的话,有紧急情况发生时,软件间的切换难以保证。
迫于用户的压力,我的经理答应想办法,找到我,小弟不才,真的找到一个办法,然后,我的经理再把我的方案完善一下,我左想右想,确实找不到更廉价的方案了。
我先把砖抛出来,希望看看河里的同行的想法。这里有些提示:
1。合同没有变,那些机器还是只运行那个软件
2。软件公司要做一下轻微的改动,收费应该不会很离谱。
3。确实可以动态显示几个相关软件的页面
4。我只花了一天的功夫来编程,而我不是那种特牛的程序员。
明天再把我的方案贴出来
土鳖出来扛一下。。。。
而这几个相关软件,在别的机器上运行。对否?
软件公司的改动是在紧急状况发生需要大电视显示时,先送出显示切换信号,再进入正常的大电视显示。
产生、传送和执行切换信号的软件和硬件应该不难,普通的大屏幕显示设备都为用户提供了示范版本。
在那些真正运行程序的机上弄双屏输出,然后在大屏幕上接一个kvm,剩下的事情就是要让这个kvm空闲的时候定时轮流切换,有报警的时候切换到一个指定的通道上。
呵呵。
可以把不重要的软件的显示等待时间设得很长,这样就基本不会和主要软件抢时间了。
小画老不变,显示那个critical的,大画想干什么干什么
写个程序创建那些要在大屏幕电视上显示的程序进程并将这些进程的主窗口映射到大屏幕电视的显示位置上,看CreateProcess函数。
用窗口最小化和最大化消息实现"在任何时候,大屏幕电视上只有一个进程的主窗口最大化"。当然,你必须在程序中找出那些进程对应的主窗口的句柄。
由于这些程序的进程由你的程序创建,“要杀要剐”还不是由你说了算。
对于那个关键程序的相应时间问题,可以采用指定CPU的方法解决。
这个正是我的想法,我的经理稍微改善了一下就成了!只须传送一个文件!
牵涉到软硬件。。。
用KVM的话,那么还要配多台机器吧?总共是20几台呢,然后还要改软件切换
那几个相关软件是要求全屏的,另外合同要求这台机器只能运行一个软件。
如果接收电脑视频,就没办法画中画了。另外画中画太小,难以看清其他软件的屏幕啊!
复杂在于更改合同,合同之所以那么签,就是担心其他软件拖垮这套软件。
我特意去查了下那台机器的设置,如果用预定的登陆,夸张到连Windows Explorer都不能用。
当然可以用指定CPU的方法来降低风险,但外包方的收费肯定就贵了。
我的想法跟红黑树的几乎一样:找一台机器,运行那几个相关软件,然后,我写个小程序,每隔若干秒,就轮流把相关软件的屏幕抓下来,以JPG格式,存放网络某处,外包方只需要更改一下那个程序,每隔若干秒,就显示一下指定的若干个JPG文件,做一个Slide Show, 而不是显示时间。
这个已经算很简单了,但我的老板还想得到更简单的:
把这几个JPG合并成一个GIF文件,GIF的特点就是可以动态显示若干个画面,达到一种动画的效果。外包方的更改就更简单了,只需要定时显示一下GIF就成了!这样他们就没有理由收费太贵了!
而且,合同也不必修改了,一举数得。
至于我这方面的编程,虽然我不牛,放狗还是会的,一搜,找到原码,于是一天就搞定了。