附錄A 控制臺程序

附錄A 控制臺程序

ID:41032171

大?。?92.50 KB

頁數:8頁

時間:2019-08-14

附錄A 控制臺程序_第1頁
附錄A 控制臺程序_第2頁
附錄A 控制臺程序_第3頁
附錄A 控制臺程序_第4頁
附錄A 控制臺程序_第5頁
資源描述:

《附錄A 控制臺程序》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫

1、·7·附錄A控制臺程序附錄A控制臺程序在Windows操作系統中運行一個應用程序后,我們經常會看到兩種界面,一種是標準的窗口界面,窗口界面的程序架構在第4章中已經有了詳細的介紹;另一種是類似于MS-DOS程序的文本界面,如常用的Ping、Xcopy等命令使用的都是這種界面,這種界面就叫做控制臺(Console),由于控制臺在Windows系統中還是以一個文本窗口的方式出現的,所以一般將這個窗口稱為控制臺窗口。從表面看,32位的控制臺程序和16位的MS-DOS應用程序在外觀和表現上都是很相似的,比如它們都是在一個黑洞洞的文本窗口中顯示文本,都支持命令行下的重

2、定向操作,讀取鍵盤的方式也是一樣的。但是,在這個表象下面,兩者卻是完完全全不同的,DOS應用程序是16位的實模式程序,而Windows下的控制臺程序卻是不折不扣的32位保護模式程序,它可以使用Win32API函數,文件頭中同樣有導入表和導出表,可以在程序中建立多個線程執(zhí)行??傊刂婆_程序是長著“DOS程序面孔”的Win32程序,可以使用Win32編程中的所有特征。進一步來說,如果一定要讓控制臺程序有一個窗口的話,也可以在其中使用CreateWindow函數來創(chuàng)建一個窗口,這樣控制臺程序可以在使用終端界面輸入輸出的同時使用窗口上的菜單來操作(但估計沒有人會

3、做這樣的事情)??刂婆_程序最主要的用途是用于網絡的遠程維護。進行遠程維護時一般使用Telnet等工具登錄到遠程主機并在上面執(zhí)行命令,如果執(zhí)行的是圖形界面的程序,這個界面是無法遠程操作的,所以我們可以發(fā)現Windows中用于網絡的命令大多數是控制臺界面的,如Ping,Netstat,Tracert,Arp,Route,Ipconfig和Finger等,與此相比,很難想像類似于Office這樣的軟件會用在遠程操作中。作為對第4章中窗口模式的補充,本節(jié)中將簡單介紹控制臺程序和窗口程序的區(qū)別,以及控制臺程序的寫法。A.1控制臺程序和窗口程序的區(qū)別除了和界面相關的代

4、碼有所不同外,控制臺程序和窗口程序的區(qū)別還在于鏈接的時候指定參數的不同,讀者一定還記得LINK程序有個subsystem參數,當這個參數指定為Windows的時候,鏈接器生成的是窗口程序,本書中絕大部分以窗口為界面的例子程序中,LINK語句是這樣寫的:Link/subsystem:windowsTest.objTest.res將subsystem參數改為console的時候,LINK程序產生的就是控制臺文件:Link/subsystem:consoleTest.objTest.res·7·附錄A控制臺程序兩種參數生成的可執(zhí)行文件的不同表現在文件頭中,可執(zhí)行

5、文件(PE文件)的文件頭中有個IMAGE_OPTIONAL_HEADER32結構,結構中的Subsystem字段就記錄了文件類型的不同,讀者可以在第17章的17.1.3小節(jié)中看到對文件頭的詳細分析。運行文件時,操作系統會檢查文件頭中的Subsystem參數,如果發(fā)現參數的類型是窗口文件,那么將文件以正常的方式運行;如果發(fā)現參數的類型是控制臺文件,那么操作系統將為程序創(chuàng)建一個控制臺窗口(即類似于DOS窗口的這個文本窗口),然后運行文件。另外,當一個控制臺程序是被另一個控制臺程序作為子進程運行的時候,系統不會為它創(chuàng)建新的控制臺窗口,而是將父進程的窗口指定給它,

6、所以在“我的電腦”中雙擊運行一個控制臺程序的時候,會出現一個新的控制臺窗口,而在“命令提示符”窗口中用命令行參數運行一個控制臺程序的時候,程序會直接使用“命令提示符”的窗口。我們可以用幾個簡單的實驗來驗證這一點。首先打開“命令提示符”,進入第4章例子程序的目錄Chapter04FirstWindow(這是一個普通的窗口程序而不是控制臺程序),在命令行下輸入FirstWindow來運行程序,程序運行后窗口出現了,但是不必等到窗口關閉,“命令提示符”就會直接回到等待輸入命令的狀態(tài),也就是說,普通的窗口程序并不會占用父進程的控制臺窗口?,F在修改Chapter0

7、4FirstWindow目錄中的makefile文件,將LINK命令的參數改成/subsystem:console,然后用nmake/a重新編譯,這樣程序的代碼沒有任何變化,僅僅是它的文件類型變成了控制臺程序而已。重復上面的步驟,在命令行下運行FirstWindow程序,可以看到,程序運行后窗口出現了,但是“命令提示符”處于等待狀態(tài),只有關閉窗口FirstWindow程序,“命令提示符”中才會回到等待輸入的狀態(tài),這說明控制臺程序的父進程如果也是控制臺程序的時候,程序將繼承父進程的控制臺窗口。現在在“程序管理器”中通過雙擊FirstWindow.exe文件

8、來運行,一個正常窗口出現的同時也出現了一個新的文本窗口,但是源代碼

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯系客服處理。