基于模拟键盘技术的DOS程序升级方法

来源 :计算机时代 | 被引量 : 0次 | 上传用户:raymond20082002
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:针对DOS程序用户界面差、不易掌握的缺点,提出了应用模拟键盘技术,并结合进程检测技术进行数据传递的方法。该方法不需要对原DOS程序进行任何修改,就能将DOS程序升级成图形操作界面。同时该方法还能对DOS程序的运行过程状态进行监测,为Windows下DOS应用程序的改造和利用提供了一种简便易行的途径。
  关键词:DOS程序;升级;GUI;模拟键盘;CPU占用率
  
  0 引言
  
  在DOS时代开发的大量辅助计算类程序,受当时的技术条件所限制,不可能采用图形化界面。这类程序的输入和输出基本都采用字符方式,在程序运行过程中需要用户进行某种交互操作时,一般都是在DOS程序特有的黑屏幕界面上进行,程序的操作性不好。随着技术的发展,开发人员已经可以很容易地开发出界面友好、易于学习和掌握的应用程序,用户也不再愿意接受那些界面呆板的DOS程序。在这种背景下,出现了对DOS程序界面升级的需求。文献[1-4]介绍了以文件作为DOS程序输入的传递接口,实现界面升级。但这种方法需要修改原DOS程序代码,重定向DOS程序从文件中读取输入信息,而不是等待用户从键盘输入,工作量比较大;如果没有源代码,将无法进行升级工作。
  本文提出一种新的方法:基于模拟键盘技术和CPU占用率检测的集成升级方法。这种方法的特点是不需要对原DOS程序进行任何修改,对不能在DOS控制台窗口中运行的DOS也适用,解决了文献[2]中所介绍方法的缺陷。
  
  1 处理流程
  
  对运行过程中不需要用户输入数据,以及可以将所需要的输入数据作为命令行参数进行调用的DOS程序,升级为Windows的图形化用户界面都是很简单的事情,这里不进行讨论。本文重点论述的是在运行过程中需要用户交互操作的DOS程序的升级,例如输入所需的数据文件保存路径,选择计算过程中是否要考虑的一些因素等等。这种交互操作可能是一步,也可能是多步。图1给出了一个典型的DOS程序运行界面示例。该程序是用于船体结构计算的一个子程序。从图1看出,这类程序界面的提示信息很不友好,而且不能利用鼠标操作,操作性不好。
  


  图1 一个典型的DOS程序运行界面
  本文所采用的方法,其处理流程如图2所示。
  首先,应用可视化编程语言编写用户交互操作界面程序。该程序建立起用户、Windows系统和DOS程序的联系。在这个程序上设置启动或调用DOS程序的按钮或菜单;还可以利用文本框、组合框或对话框接受用户输入,利用单选或复选按钮实现DOS命令行参数的输入等。
  其次,启动基于图形界面的集成程序界面,并调用DOS程序。
  第三,DOS程序运行后,监测该DOS程序的CPU占用率,对其运行状态进行检测。若程序正处于等待用户输入状态,此时利用模拟键盘API函数,给程序发送所需要的输入数据消息,直到程序模块运行结束。当然程序运行所需要的数据,仍然需要用户来决定,只是这类数据操作是利用图形界面来操作的。
  最后,程序结束运行,返回图形操作界面,显示计算结果。
  


  图2处理流程图
  
  2 主要技术原理
  
  2.1进程技术
  启动一个可执行程序(.exe,.bat)的方法有多种,但主要是利用Windows平台的API函数Winexec,或编程语言提供的其他类似函数,例如Visual Fortran提供的PUNQQ函数,VB提供的Shell函数等。这种方法启动DOS平台下的可执行程序,运行后出现的界面就是大家熟悉的黑屏幕,如图1所示。这种方法称为进程调用技术。因为被启动的程序和基于GUI方式的主程序是在两个不同的进程空间,相互不能直接访问到对方的内存区。在本文的工作中,也利用进程技术来启动要升级到GUI界面的原DOS平台程序。本文利用VB.NET平台,使用该平台所提供的Process类来启动相应的DOS程序。图3是启动一个DOS程序的界面示例。在『启动计算』按钮中设置如下代码:
  Dim p As New Process
  p.Start("D:W.C2006.exe")'要启动的DOS程序是ZC2006.exe
  


  图3调用DOS程序的示例界面
  
  2.2键盘模拟方法
  本文采用键盘模拟的方式来实现主程序和被调用程序(DOS程序)间的数据传递。其原理如下:
  Windows API函数keybd_event函数能够模拟一次键盘按击事件,其函数接口声明如下:
  Declare Sub keybd_event Lib"user32"Alias"keybd_event"
  (ByVal bVk As Byte,ByVal bScan As Byte,ByVal dwFlags
  As Long,ByVal dwExtralnfo As Long)
  其中参数bVk就是要模拟的虚拟键码,其他参数赋值为0。这里虚拟键码与字符的ASCII码是不对应的,比如字母“a”的ASCII码是十进制的97,但这个字符的虚拟键码是十进制的65。所以要进行必要的转换。该转换可以利用API函数VkKeyScan来实现。接口声明如下:
  Public Declare Function VkKeyScan Lib"user32"Alias
  "VkKeyScanA"(ByVal cChar As Byte)As Integer
  参数cChar代表需要取得虚拟键码的字符的ASCII值。所以,对图3所示界面的文本框中输入的文件名,采用消息的方式发送到DOS程序窗口中去的主要代码如下:
  If Me.TxtB_filename.Text<>String.Empty Then
  Dim i As Integer
  For i=0 TO Me.TxtB_filename.Text.Length-1
  keybd_event(VkKeyScan(Asc(Me.TxtB_filename.Text.
  Substring(i,1))),0,0,0)
  Next i
  keybd_event(VK_RETURN,0,0,0)’发送一个回车按键
  End If
  对于运行时需要用户多步交互操作的DOS程序,可在Windows图形界面程序中,将用户通过界面选择、输入的数据存入一个字符串类型数组M。然后利用定时器的定时消息来检测DOS程序运行状态,处于空闲态时,将字符串数组中当前要发送元素的内容用API函数发送给DOS程序,并记录下一次要发送的消息在数组M中的位置。
  
  2.3进程状态检测技术
  被启动的DOS程序,有些在运行过程中需要用户进行多步交互操作。在这种情况下,就存在什么时间给DOS程序发送所需的输入信息的问题。将该DOS程序正常运行所需要的多步输入信息一次全部发送是没有任何意义的。解决这个发送时间的问题有两种处理方法。
  方法一:因为以前开发的DOS程序在当前电脑硬件配置条件下,运行时间一般都很短,所以可以设定一个固定的时间间隔来发送,这个时间间隔可以比实际需要的时间大很多,以保证DOS程序已经运行到等待输入的状态。
  方法二:利用Windows平台的进程监测技术。如果一个程序正在运行,其对CPU的占用率肯定是大于0的,而处于等待输入的状态时,其对CPU的占用率就等于0。所以可以监测特定程序对CPU的占用率来判断DOS程序的状态。
  两种方法比较,方法一的实现很简单,但如果特定程序在某两步输入操作间的运行时间很长,则这种方法不能保证一定合适,而且效率要低一些。所以本文采用第二种方法。 本文利用.NET平台所提供的Process对象,能够检测出某个时间点上,一个进程对CPU的占用率。图4是本文开发的进程检测程序的界面。只有当程序处于等待用户输入的状态时,才能发送所需要的数据给DOS程序。如果提前发送会导致数据的丢失,导致运行错误;而延迟发送又影响程序运行效率,最优化的方法是实时监控DOS程序的运行状态。
  


  图4 进程信息示例程序界面
  
  3 结束语
  
  用可视化编程语言来制作用户交互界面是很容易的,因此利用可视化编程语言来制作DOS程序的数据输入界面和结果输出界面,将DOS程序升级成具有良好操作性的图形化界面,具有很强的应用价值。本文描述的DOS程序升级方法,不需对原DOS程序进行任何修改,花费最小的代价,将程序升级到GUI图形界面,而且对没有程序源代码的DOS程序也完全适用。应用这一技术方案,对原DOS时代开发的船体计算程序进行了升级,证明了该方法简单可行,完全可应用于其他同类型DOS程序的升级,为Windows下DOS应用程序的改造和利用提供了一种简便易行的方法。
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘 要:在以Car构件为基础的嵌入式研究领域中,构建面向Web服务的Car构件运行容器一直是研究的热点。文章阐述了面向Web服务的Car构件运行容器的特点,介绍了构件技术以及“和欣”操作系统,讨论了构件化的Web Container的分层设计理念,阐述了在“和欣”操作系统上实现的基于构件的Car Faces系统。该系统充分发挥了构件技术的优势,并具有简单、高效可配置等特点,很好地满足了以Car构件
期刊
摘要:提出一种新主机加入移动自组网的地址自配置机制。针对OLSR路由协议网络负荷较重的情况,特别考虑了路由协议的原理特点,设计了一种基于代理邻居的简单地址自配置方法;针对代理邻居的发现、局域地址的分配、全局地址的检测与分配提出了完整的解决方案,设计了相关分组格式,并保持了与OLSR通用数据格式的一致性。该方法算法简单,对网络负荷影响极小。  关键词:OLSR;地址自配置;邻居代理;地址池    0
期刊
摘要:利用Windows Vista的增强功能并结合PNRP(对等名称解析协议)、PNM(People Near Me)和WCF(WindowsCommunication Foundation)中引进的PeerChannel功能,解决了传统的P2P应用程序开发中的常见问题。  关键词:对等名称解析协议;PNM;WCF;PeerChannel    0引言    从传统意义来说,P2P应用程序开发所
期刊
摘 要:中间人攻击是网络攻击的重要手段之一,而利用ARP欺骗是比较容易实施此类攻击的。文章对基于ARP欺骗的中间人攻击进行了分析,根据ARP本身的缺陷,即完全相信所有消息,对消息不加以任何认证的特点,提出了一种利用非对称加密来抵御中间人攻击的方法,并重点描述了消息认证的过程和密钥的生成及管理。  关键词:ARP协议;ARP欺骗;中间人攻击;非对称加密    0 引言    中间人攻击m在网络安全领
期刊
摘要:CMMI为软件产品及软件过程提供了一套定量的表示和分析,即软件度量的模型。有效的软件度量过程能促进组织的软件过程能力的改进。文章结合国内应用特点,介绍了基于CMMI的多层架构软件产品的度量模型,并着重讨论了基于CMMI的软件过程度量,总结了软件过程度量的工作方法和思路,提出了解决国内软件度量的一般性方法,为软件过程改进提供了可行的方法和实践。  关键词:CMMI;软件度量;软件过程能力;度量
期刊
摘要:伴随全球经济一体化进程的推进,信息技术在物流领域的应用和发展,传统的物流行业正逐步向电子物流转变。文章在分析物流企业业务流程的基础上,着重介绍了第三方物流信息系统的总体设计和关键技术,并提供了实现企业之间数据交换接口的具体实例。该系统能为企业带来竞争优势和经济效益,促进我国第三方物流的发展。  关键词:Web Service;物流信息系统;接口;数据交换    0 引言    全球的经济正朝
期刊
摘要:基于角色的访问控制,使角色成为信息访问主体,可以有效地解决安全访问问题。文章以OpenPERMIS为开发原型,采用Struts框架技术,设计并实现了RBAC中的属性证书管理系统,功能包括属性证书的创建、编辑、验证、撤销、查询等,为将RBAC系统成功运用到基于Web的应用奠定了基础。  关键词:Struts框架;属性证书管理;RBAC;访问控制    0 引言    基于角色的访问控制(Rol
期刊
摘要:为减少J2ME游戏运行平台的硬件环境对游戏的性能限制,在开发阶段必须对游戏的程序进行改良化设计和采用优化算法。文章从游戏运行性能的角度出发,分析了各种常用方案的不足,并给出了对象池技术、基本数据类型替换法、屏蔽函数计算三种能够节省资源开销和处理器时间以提高游戏运行性能的优化策略。实验对比表明,采用优化算法后性能得到了提高。  关键词:手机游戏;J2ME;MIDP;性能;优化    0 引言 
期刊
摘要:同一局域网内出现多种不同的Windows系统,安装不同版本Windows操作系统的计算机之间不能互访。文章从网络协议、计划任务等多方面探讨了WindowsXP操作系统不能与其它Windows操作系统互访的原因,并在此基础上提出了相应的解决方法。  关键词:WinXP;网络协议;注册表;计划任务    0 引言    现在,已经有许多人在使用Win2000和WinXP来联网。因为各机器使用的操
期刊
摘要:针对Web数据打印缺乏灵活性的问题,使用中间件动态生成的XML,结合XSL如Document对象,提出了几种用户可自定义打印格式的通用解决方案。该方案应用于“国有资产智能管理系统”项目取得了良好的效果。  关键词:中间件;XML;XSL;Document;数据打印;Web    0 引言    随着数据库技术与网络的发展以及互联网的普及,基于B/S(Browser/Server)模式的软件应
期刊