999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于模擬鍵盤技術(shù)的DOS程序升級方法

2007-01-01 00:00:00趙學(xué)強
計算機時代 2007年5期

摘要:針對DOS程序用戶界面差、不易掌握的缺點,提出了應(yīng)用模擬鍵盤技術(shù),并結(jié)合進(jìn)程檢測技術(shù)進(jìn)行數(shù)據(jù)傳遞的方法。該方法不需要對原DOS程序進(jìn)行任何修改,就能將DOS程序升級成圖形操作界面。同時該方法還能對DOS程序的運行過程狀態(tài)進(jìn)行監(jiān)測,為Windows下DOS應(yīng)用程序的改造和利用提供了一種簡便易行的途徑。

關(guān)鍵詞:DOS程序;升級;GUI;模擬鍵盤;CPU占用率

0 引言

在DOS時代開發(fā)的大量輔助計算類程序,受當(dāng)時的技術(shù)條件所限制,不可能采用圖形化界面。這類程序的輸入和輸出基本都采用字符方式,在程序運行過程中需要用戶進(jìn)行某種交互操作時,一般都是在DOS程序特有的黑屏幕界面上進(jìn)行,程序的操作性不好。隨著技術(shù)的發(fā)展,開發(fā)人員已經(jīng)可以很容易地開發(fā)出界面友好、易于學(xué)習(xí)和掌握的應(yīng)用程序,用戶也不再愿意接受那些界面呆板的DOS程序。在這種背景下,出現(xiàn)了對DOS程序界面升級的需求。文獻(xiàn)[1-4]介紹了以文件作為DOS程序輸入的傳遞接口,實現(xiàn)界面升級。但這種方法需要修改原DOS程序代碼,重定向DOS程序從文件中讀取輸入信息,而不是等待用戶從鍵盤輸入,工作量比較大;如果沒有源代碼,將無法進(jìn)行升級工作。

本文提出一種新的方法:基于模擬鍵盤技術(shù)和CPU占用率檢測的集成升級方法。這種方法的特點是不需要對原DOS程序進(jìn)行任何修改,對不能在DOS控制臺窗口中運行的DOS也適用,解決了文獻(xiàn)[2]中所介紹方法的缺陷。

1 處理流程

對運行過程中不需要用戶輸入數(shù)據(jù),以及可以將所需要的輸入數(shù)據(jù)作為命令行參數(shù)進(jìn)行調(diào)用的DOS程序,升級為Windows的圖形化用戶界面都是很簡單的事情,這里不進(jìn)行討論。本文重點論述的是在運行過程中需要用戶交互操作的DOS程序的升級,例如輸入所需的數(shù)據(jù)文件保存路徑,選擇計算過程中是否要考慮的一些因素等等。這種交互操作可能是一步,也可能是多步。圖1給出了一個典型的DOS程序運行界面示例。該程序是用于船體結(jié)構(gòu)計算的一個子程序。從圖1看出,這類程序界面的提示信息很不友好,而且不能利用鼠標(biāo)操作,操作性不好。

圖1 一個典型的DOS程序運行界面

本文所采用的方法,其處理流程如圖2所示。

首先,應(yīng)用可視化編程語言編寫用戶交互操作界面程序。該程序建立起用戶、Windows系統(tǒng)和DOS程序的聯(lián)系。在這個程序上設(shè)置啟動或調(diào)用DOS程序的按鈕或菜單;還可以利用文本框、組合框或?qū)υ捒蚪邮苡脩糨斎耄脝芜x或復(fù)選按鈕實現(xiàn)DOS命令行參數(shù)的輸入等。

其次,啟動基于圖形界面的集成程序界面,并調(diào)用DOS程序。

第三,DOS程序運行后,監(jiān)測該DOS程序的CPU占用率,對其運行狀態(tài)進(jìn)行檢測。若程序正處于等待用戶輸入狀態(tài),此時利用模擬鍵盤API函數(shù),給程序發(fā)送所需要的輸入數(shù)據(jù)消息,直到程序模塊運行結(jié)束。當(dāng)然程序運行所需要的數(shù)據(jù),仍然需要用戶來決定,只是這類數(shù)據(jù)操作是利用圖形界面來操作的。

最后,程序結(jié)束運行,返回圖形操作界面,顯示計算結(jié)果。

圖2處理流程圖

2 主要技術(shù)原理

2.1進(jìn)程技術(shù)

啟動一個可執(zhí)行程序(.exe,.bat)的方法有多種,但主要是利用Windows平臺的API函數(shù)Winexec,或編程語言提供的其他類似函數(shù),例如Visual Fortran提供的PUNQQ函數(shù),VB提供的Shell函數(shù)等。這種方法啟動DOS平臺下的可執(zhí)行程序,運行后出現(xiàn)的界面就是大家熟悉的黑屏幕,如圖1所示。這種方法稱為進(jìn)程調(diào)用技術(shù)。因為被啟動的程序和基于GUI方式的主程序是在兩個不同的進(jìn)程空間,相互不能直接訪問到對方的內(nèi)存區(qū)。在本文的工作中,也利用進(jìn)程技術(shù)來啟動要升級到GUI界面的原DOS平臺程序。本文利用VB.NET平臺,使用該平臺所提供的Process類來啟動相應(yīng)的DOS程序。圖3是啟動一個DOS程序的界面示例。在『啟動計算』按鈕中設(shè)置如下代碼:

Dim p As New Process

p.Start(\"D:W.C2006.exe\")'要啟動的DOS程序是ZC2006.exe

圖3調(diào)用DOS程序的示例界面

2.2鍵盤模擬方法

本文采用鍵盤模擬的方式來實現(xiàn)主程序和被調(diào)用程序(DOS程序)間的數(shù)據(jù)傳遞。其原理如下:

Windows API函數(shù)keybd_event函數(shù)能夠模擬一次鍵盤按擊事件,其函數(shù)接口聲明如下:

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)

其中參數(shù)bVk就是要模擬的虛擬鍵碼,其他參數(shù)賦值為0。這里虛擬鍵碼與字符的ASCII碼是不對應(yīng)的,比如字母“a”的ASCII碼是十進(jìn)制的97,但這個字符的虛擬鍵碼是十進(jìn)制的65。所以要進(jìn)行必要的轉(zhuǎn)換。該轉(zhuǎn)換可以利用API函數(shù)VkKeyScan來實現(xiàn)。接口聲明如下:

Public Declare Function VkKeyScan Lib\"user32\"Alias

\"VkKeyScanA\"(ByVal cChar As Byte)As Integer

參數(shù)cChar代表需要取得虛擬鍵碼的字符的ASCII值。所以,對圖3所示界面的文本框中輸入的文件名,采用消息的方式發(fā)送到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)’發(fā)送一個回車按鍵

End If

對于運行時需要用戶多步交互操作的DOS程序,可在Windows圖形界面程序中,將用戶通過界面選擇、輸入的數(shù)據(jù)存入一個字符串類型數(shù)組M。然后利用定時器的定時消息來檢測DOS程序運行狀態(tài),處于空閑態(tài)時,將字符串?dāng)?shù)組中當(dāng)前要發(fā)送元素的內(nèi)容用API函數(shù)發(fā)送給DOS程序,并記錄下一次要發(fā)送的消息在數(shù)組M中的位置。

2.3進(jìn)程狀態(tài)檢測技術(shù)

被啟動的DOS程序,有些在運行過程中需要用戶進(jìn)行多步交互操作。在這種情況下,就存在什么時間給DOS程序發(fā)送所需的輸入信息的問題。將該DOS程序正常運行所需要的多步輸入信息一次全部發(fā)送是沒有任何意義的。解決這個發(fā)送時間的問題有兩種處理方法。

方法一:因為以前開發(fā)的DOS程序在當(dāng)前電腦硬件配置條件下,運行時間一般都很短,所以可以設(shè)定一個固定的時間間隔來發(fā)送,這個時間間隔可以比實際需要的時間大很多,以保證DOS程序已經(jīng)運行到等待輸入的狀態(tài)。

方法二:利用Windows平臺的進(jìn)程監(jiān)測技術(shù)。如果一個程序正在運行,其對CPU的占用率肯定是大于0的,而處于等待輸入的狀態(tài)時,其對CPU的占用率就等于0。所以可以監(jiān)測特定程序?qū)PU的占用率來判斷DOS程序的狀態(tài)。

兩種方法比較,方法一的實現(xiàn)很簡單,但如果特定程序在某兩步輸入操作間的運行時間很長,則這種方法不能保證一定合適,而且效率要低一些。所以本文采用第二種方法。 本文利用.NET平臺所提供的Process對象,能夠檢測出某個時間點上,一個進(jìn)程對CPU的占用率。圖4是本文開發(fā)的進(jìn)程檢測程序的界面。只有當(dāng)程序處于等待用戶輸入的狀態(tài)時,才能發(fā)送所需要的數(shù)據(jù)給DOS程序。如果提前發(fā)送會導(dǎo)致數(shù)據(jù)的丟失,導(dǎo)致運行錯誤;而延遲發(fā)送又影響程序運行效率,最優(yōu)化的方法是實時監(jiān)控DOS程序的運行狀態(tài)。

圖4 進(jìn)程信息示例程序界面

3 結(jié)束語

用可視化編程語言來制作用戶交互界面是很容易的,因此利用可視化編程語言來制作DOS程序的數(shù)據(jù)輸入界面和結(jié)果輸出界面,將DOS程序升級成具有良好操作性的圖形化界面,具有很強的應(yīng)用價值。本文描述的DOS程序升級方法,不需對原DOS程序進(jìn)行任何修改,花費最小的代價,將程序升級到GUI圖形界面,而且對沒有程序源代碼的DOS程序也完全適用。應(yīng)用這一技術(shù)方案,對原DOS時代開發(fā)的船體計算程序進(jìn)行了升級,證明了該方法簡單可行,完全可應(yīng)用于其他同類型DOS程序的升級,為Windows下DOS應(yīng)用程序的改造和利用提供了一種簡便易行的方法。

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。

主站蜘蛛池模板: 无码免费的亚洲视频| 日韩精品高清自在线| 亚洲国产综合精品一区| 欧美日韩中文国产va另类| 91网址在线播放| 日韩无码真实干出血视频| 免费看一级毛片波多结衣| 色天堂无毒不卡| 91精品啪在线观看国产| 亚洲人成影院在线观看| 福利姬国产精品一区在线| 亚洲欧美在线综合图区| 亚洲人成人伊人成综合网无码| 国产精品午夜电影| 都市激情亚洲综合久久| 国产小视频在线高清播放| 久久公开视频| 成人免费网站久久久| 欧美人与动牲交a欧美精品| 国产精品网拍在线| 国产精品漂亮美女在线观看| 免费A级毛片无码无遮挡| 久久青草免费91线频观看不卡| 色偷偷男人的天堂亚洲av| 狠狠色婷婷丁香综合久久韩国| 毛片一级在线| 久久精品午夜视频| 911亚洲精品| 特级精品毛片免费观看| 中文字幕亚洲精品2页| 国产成人综合日韩精品无码首页 | 精品视频91| 午夜久久影院| 小说区 亚洲 自拍 另类| 欧美精品成人一区二区在线观看| 熟妇人妻无乱码中文字幕真矢织江| 久久人搡人人玩人妻精品一| 久久精品丝袜高跟鞋| 永久在线精品免费视频观看| 日韩高清在线观看不卡一区二区 | 高清色本在线www| 天天视频在线91频| 婷五月综合| 欧美亚洲第一页| 青青国产视频| 免费毛片a| 亚洲天堂日韩av电影| 国产福利一区二区在线观看| 欧美一级一级做性视频| 制服丝袜亚洲| 国产高清国内精品福利| 91免费观看视频| 亚洲免费福利视频| 日韩国产欧美精品在线| 久久精品91麻豆| 日本日韩欧美| 久久久久无码国产精品不卡| 精品国产91爱| 亚洲无线一二三四区男男| 国产一级在线播放| 最新国产精品第1页| 欧美亚洲激情| 无码视频国产精品一区二区| 91精品免费久久久| 五月天福利视频| 伊人久热这里只有精品视频99| 欧美一区二区福利视频| 欧美福利在线观看| 亚洲人成高清| AV熟女乱| 白浆视频在线观看| V一区无码内射国产| 男女性色大片免费网站| 91色在线视频| 国产精品片在线观看手机版| 伊人久久影视| 毛片免费试看| 日韩欧美色综合| 国产毛片不卡| 18禁影院亚洲专区| 国产精品视频导航| 强乱中文字幕在线播放不卡|