天天看點

Win32 API概論

1.1為什麼使用 Win32 API

在Windows程式設計領域處于發展初期時,Windows程式員可使用的程式設計工具唯有API函數。這些函數在程式員手中猶如“積木塊”一樣,可搭建出各種界面豐富、功能靈活的應用程式。不過,由于這些函數結構複雜,是以往往難以了解,而且容易誤用。

随 着軟體技術的不斷發展,在Windows平台上出現了很多優秀的可視化程式設計環境,程式員可以采用“所見即所得”的程式設計方式來開發具有精美使用者界面和功能 的應用程式。這些可視化程式設計環境操作簡便、界面友好,比如:Visual C++,Delphi,Visual Basic等等。在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能。事實上,這些類庫和控件都是構築在Windows API的基礎上的,但它們使用友善,加速了Windows應用程式的開發,是以受到程式員的普遍采用。有了這些類庫和控件,程式員們便可以把主要精力放在 整體功能的設計上,而不必過于關注具體細節。不過,這也導緻了非常多的程式員在類庫面前“固步自封”,對下層API函數的強大功能一無所知。

實 際上。程式員要想開發出更靈活、更實用、更具效率的應用程式,必然要涉及到直接使用API函數。雖然類庫和控件使應用程式的開發容易得多,但它們隻提供 Microsoft Windows的一般功能,對于一些比較複雜和特殊的功能來說,單使用類庫和控件是難以實作的,必須直接使用API函數來編寫。API函數是構築整個 Windows架構的基石,隻有充分了解和利用API函數,才能深入到Windows的内部,充分發揮各種32位平台的強大功能和靈活性,才能成功地擴充 和突破類庫、控件和可視開發環境的限制。

1.2 Win32 API 簡介

Win32 API即為Microsoft 32位平台的應用程式程式設計接口(Application Programming Interface)。所有在Win32平台上運作的應用程式都可以調用這些函數。

使 用Win32 API,應用程式可以充分挖掘Windows的32位作業系統的潛力。 Mircrosoft的所有32位平台都支援統一的API,包括函數、結構、消息、宏及接口。使用 Win32 API不但可以開發出在各種平台上都能成功運作的應用程式,而且也可以充分利用每個平台特有的功能和屬性。

在具體程式設計時,程式實作方式的差異依賴于相應平台的底層功能的不同。最顯著的差異是某些函數隻能在更強大的平台上實作其功能。例如,安全函數隻能在Windows NT作業系統下使用。另外一些主要差别就是系統限制,比如值的範圍限制,或函數可管理的項目個數等等。

标準Win32 API函數可以分為以下幾類:

視窗管理

視窗通用控制

Shell特性

圖形裝置接口

系統服務

國際特性

網絡服務

在下面各節中,我們分别介紹這7種類型的API函數。

1.2.1 視窗管理函數

視窗管理函數向應用程式提供了一些建立和管理使用者界面的方法。你可以使用視窗管理函數建立和使用視窗來顯示輸出、提示使用者進行輸入以及完成其他一些與使用者進行互動所需的工作。大多數應用程式都至少要建立一個視窗。

應用程式通過建立視窗類及相應的視窗過程來定義它們所用窗日的外觀和行為。視窗類可辨別視窗的預設屬性,比如視窗是否接受輕按兩下滑鼠按鈕的操作。或是否帶有菜單。視窗過程中包含的代碼用于定義視窗的行為,完成所需的任務,以及處理使用者的輸入。

應 用程式可使用GDI函數來産生視窗的輸出。由于所有的視窗都共享顯示螢幕,是以應用程式不接受對整個螢幕的通路。系統管理所有的輸出内容,并對它們進行 排列和剪裁,使其能夠适合相應的視窗。應用程式可以在處理輸入消息時,或為了響應系統的需求而在視窗中繪圖。當視窗的大小或位置發生變化時,系統通常會向 應用程式發送一個消息,要求它對該視窗中原來未顯露的區域進行重畫。

應用程式以消息的形式接受滑鼠和鍵盤輸入。系統将滑鼠移動、滑鼠按鈕操作轉換為輸入消息,并将這些消息放入該應用程式的消息隊列中。系統為每個應用程式都自動提供一個消息隊列。應用程式使用消息函數從消息隊列中擷取消息,并将它們分派給适當的視窗過程進行處理。

應 用程式可以直接處理滑鼠和鍵盤輸人,也可以讓系統使用菜單和鍵盤加速健将這些低級輸入轉換成指令消息。你可以使用菜單向使用者展現一個指令清單。系統對所 有菜單操作所需的動作進行管理,包括讓使用者選擇一個指令,然後再向窗日過程發送一個辨別該選擇的消息。鍵盤加速鍵是應用程式定義的按鍵操作組合,系統可将 其轉換為消息。加速鍵通常對應于菜單中的某個指令,并與該指令産生相同的消息。

應用程式通過在對話框中向使用者提示附加資訊來響應指令消息。對 話框實際是一個臨時的視窗,用于顯示資訊或提示輸入。一個對話框通常由一些表示按鈕和方框的 控制組成,可供使用者進行選擇或輸入資訊。對話框中可包括用于輸入正文、滾動正文、從清單中選擇清單項等操作的控制。對話框管理和處理來自這些控制的輸入, 使應用程式可使用這些資訊,來完成所要求的指令操作。

通過使用“資源”可以共享很多有用的資料,比如位圖、圖示、字型和字元串等,隻需将這些資料作為“資源”添加到應用程式或DLL檔案中。應用程式通過使用資源函數,找到資源并将它們加載到記憶體來擷取這些資料。

視窗管理函數還提供了其他一些與視窗有關的特性,比如插入标記(Caret)、剪貼闆、光标、挂鈎(Hook)、圖示以及菜單等函數。

視窗管理函數包括以下幾類:

易用特性函數(Accessibility Features)

Win32 API提供的一系列易用特性使得有殘疾的人也能很容易的使用計算機,Win32 API提供了一些函數和結構來控制這些特性。

按鈕函數(Button)

Microsoft提供了對話框和控制來支援應用程式與使用者之間的互動通訊。按鈕就是一種控制,使用者可通過點選按鈕來向應用程式提供輸入資訊。

插入标記函數(Caret)

一個插入标記是位于視窗繪圖區中的一個閃動的直線、方塊或圖示。插入标記通常用于訓示文本或圖形将插入的位置。Win32應用程式可以使用插入标記函數來建立一個插入标記,改變它的閃動頻率,顯示、隐藏插入标記,或重新設定插入标記的位置。

組合框函數(Combo Box)

組合框是由COMBOBOX類定義的一種控制,綜合了清單框和編輯控制的很多功能。使用組合框函數可以在組合框中顯示或擷取不同類型的資料。

通用對話框函數(Common Dialog Box)

通用對話框是在通用對話框庫中定義的,其功能是用來完成一些通用的任務,比如打開檔案、列印文檔等。通用對話框為使用者提供了一個統一的使用者界面,使使用者在不同的應用程式中完成通用任務時的操作都相同,不必每次都學習不同的操作過程。

光标函數(Cursor)

光标是顯示螢幕上的一個小圖形,其所在的位置由指點裝置比如滑鼠、光筆或軌迹球等控制。當使用者移動滑鼠時,系統就會随之移動光标的位置。應用程式使用Win32光标函數可以建立、加載、顯示、移動、限制和删除光标。

對話框函數(Dialog Box)

對話框是應用程式建立的一個臨時視窗,用于擷取使用者的輸入。應用程式通常使用對話框向使用者顯示一些指令提示資訊。一個對話框一般由一個或多個控制(子視窗)組成,這些控制可用來輸入文本、選擇選項或執行指令動作。

編輯控制函數(Edit Control)

編輯控制是一個矩形視窗,通常用在對話框中,使用者可通過鍵盤向編輯控制中輸入和編輯文本。系統對Unicode文本(字元采用雙位元組編碼)和ANSI(字元采用單位元組編碼)文本都支援。

圖示函數(Icon)

圖示是一個圖檔,由一個位圖圖像組成,并和一個掩碼組合構成該圖檔的透明區域。當提到圖示時,可以是下列兩種情況:

1)單個圖示圖像。資源類型為RT_ICON。

2)一組圖示圖像,系統或應用程式可從中選擇。資源類型為RT_GROUP_JCON。

應用程式使用圖示函數可以建立、顯示、删除和複制圖示。

鍵盤加速健函數(Keyboard Accelerator)

鍵盤加速鍵(或簡稱為加速鍵)是一個按鍵操作或多個按鍵操作的組合,可向應用程式發送WM_COMMAND或WM_SYSCOMMAND消息。

使用鍵盤加速鍵函數可以拷貝、建立、加載或删除加速鍵表,* 圖示是一個圖檔,由一個位圖圖像組成,并和一個掩碼組合構成該圖檔的透明區域。當提到圖示時,可以是下列兩種情況:

1)單個圖示圖像。資源類型為RT_ICON。

2)一組圖示圖像,系統或應用程式可從中選擇。資源類型為RT_GROUP_JCON。

應用程式使用圖示函數可以建立、顯示、删除和複制圖示。

鍵盤加速健函數(Keyboard Accelerator)

鍵盤加速鍵(或簡稱為加速鍵)是一個按鍵操作或多個按鍵操作的組合,可向應用程式發送WM_COMMAND或WM_SYSCOMMAND消息。

使用鍵盤加速鍵函數可以拷貝、建立、加載或删除加速鍵表,還可以将加速鍵消息轉換為指令消息。

鍵盤輸入函數(Keyboard Input)

鍵盤輸入函數提供了接受和處理鍵盤輸入的方法。

清單框函數(List Box)

Microsoft的Win32 API提供了對話框和控制來支援應用程式與使用者之間的互動通訊。清單框是一個控制視窗,其中包含一系列選項,可供使用者進行選擇。使用清單框函數可以在清單框中顯示或擷取不同類型的資料。

菜單函數(Menu)

菜單函數向Win32應用程式提供了一系列建立、管理和使用菜單的方法,包括對菜單條、菜單項。

于菜單等的處理。

消息和消息隊列函數(Message and Message Queue)

消息和消息隊列函數向Win32應用程式提供了一系列使用消息和消息隊列的方法,包括對消息進行

傳播、發送、擷取、轉換等操作。

滑鼠輸入函數(Mouse Input)

滑鼠輸入函數提供了接受和處理滑鼠輸入的方法。

多文檔接口函數(Multiple Document Interface)

多文檔接口(MDI)是應用程式定義使用者界面的一種規範,在這種界面下,使用者可以同時使用多個文檔。

資源函數(Resource)

一 個資源是一些二進制資料,可以添加到Win32應用程式的可執行檔案中。資源既可以是标準的,也可以是自己定義的。标準資源中的資料包括圖示、光标、菜 單、對話框、位圖、增強元檔案、字型、加速鍵表、消息表入口、字元串表入口或版本。應用程式定義的資源(也稱為定制的資源)可以包含特

殊應用程式所需的任何資料。

使用資源函數可以添加、删除、拷貝、替換或加載各種資源資料。

滾動條函數(Scroll Bar)

在Win32應用程式的視窗中,可以顯示比該視窗的顯示區更大的資料對象,比如文檔或位圖。當視窗提供了滾動條時,使用者就可以通過拖動滾動條來浏覽該資料對象中位于顯示區外面的部分。

滾動條包括水準滾動條和垂直滾動條。使用滾動條函數可以建立和管理這兩種滾動條。

視窗函數(Window)

在圖形化的Win32應用程式中,視窗是螢幕上的一個矩形區域,應用程式可在該區域中顯示輸出結果,并接受使用者輸入。是以,一個圖形化的Win32應用程式的首要任務之一就是建立一個視窗。

一個視窗與其他視窗共享顯示螢幕,也包括其他應用程式所建立的視窗。一次隻能有一個視窗接受使用者的輸入。使用者可以使用滑鼠、鍵盤或其他輸人裝置與該視窗及擁有該視窗的應用程式進行互動。使用視窗函數可以建立和管理視窗。

視窗類函數(Window Class)

一個視窗類是一個屬性的集合,系統将該屬性集合用作建立視窗的模闆。每個視窗都是某個視窗類的一個成員。使閑置或删除視窗屬性。

1.2.2 視窗通用控制

系 統Shell提供了一些控制,使用這些控制可以使視窗具有與衆不同的外觀。由于這些控制是由DLL支援的,是作業系統的一部分,是以它們對所有的應用程 序都可用。使用通用控制有助于使應用程式的使用者界面與系統Shell及其他應用程式保持一緻。由于開發一個控制需要花費一定的時間,是以直接使用通用控制 也可以節省大量的開發時間。

通用控制是由通用控制庫COMCTL32.DLL支援的一個控制視窗集。與其他控制一樣,一個通用控制也是應用程 序的一個子視窗,它與其他視窗聯合使用, 完成I/O操作。通用控制DLL包括一個程式設計接口,應用程式可使用其中的函數建立和管理控制。以及從控制中接受使用者輸入。

1.2.3 Shell特性

Win32 API中包含一些接口和函數,應用程式可使用它們來增強系統Shell的各方面功能。

一個名字空間是一個符号集合,比如檔案和目錄名字,或資料庫關鍵字。Shell使用一個單層結構的名字空間來組織使用者關心的所有對象,包括檔案、儲存設備、列印機及網絡資源。名字空間類似于檔案系統的目錄結構,隻不過名字空間中包含的是對象,而不是檔案和目錄。

快 捷鍵(也稱為一個Shell連接配接)是一個資料對象,它包含的資訊可用于通路位于Shell名字空間的任何位置的其他對象。使用快捷鍵時,應用程式不必知 道對象的目前名字和位置就可以通路該對象。可以通過快捷鍵通路的對象包括檔案、檔案夾、磁盤驅動器、列印機及網絡資源。

有幾種方法可以擴充 Shell。系統使用圖示來表示Shell名字空間中的檔案。預設情況下,系統對具有相同檔案擴充名的所有檔案都顯示相同的圖示。可以 用一個圖示句柄來改變某特殊檔案的預設圖示。使用上下文相關菜單句柄可以修改一個上下文相關菜單的内容,這也是一種Shell擴充。當使用者用滑鼠右鍵點選 或拖動一個對象時,系統會顯示一個上下文相關菜單。該上下文相關菜單中所包含的指令隻應用在被點選或拖動的對象上。大多數上下文相關菜單都包含一個 Properties指令,用于顯示所選中項目的屬性表。一個屬性表由一系列重疊的視窗組成(每個視窗稱為一頁),用于顯示有關某個對象的資訊。屬性表句 柄是一種Shell擴充,使用它可以向系統定義的屬性表中添加頁,或替換控制台的屬性表的某些頁。一個拷貝挂鈎(Hook)句柄是一種 Shell擴充,可以允許或拒絕對一個檔案對象的移動、拷貝、删除或重命名。

系統Shell包含一個快速檢視(Quick View)指令,使使用者可以直接檢視一個檔案的内容.而不必運作建立該檔案的應用程式。檔案浏覽器提供了一個用于檢視檔案的使用者界面。Shell使用檔案 擴充名來确定應運作哪個浏覽器。你可以為新的檔案格式提供檔案浏覽器,或用具有更強功能的浏覽器來替換原來的浏覽器。檔案浏覽器與檔案分析器聯合使用,後 者的功能是對檔案名進行分析,以便确定應生成哪種類型檔案的 QUck View。你還可以提供其他的檔案分析器來支援新的檔案類型。

1.2.4 圖形裝置接口

圖 形裝置接口(GDI)提供了一系列的函數和相關的結構,應用程式可以使用它們在顯示器、列印機或其他裝置上生成圖形化的輸出結果。使用GDI函數可以繪 制直線、曲線、閉合圖形、路徑、文本以及位圖圖像。所繪制的圖形的顔色和風格依賴于所建立的繪圖對象,即畫筆、筆刷和字型。你可以使用畫筆來繪制直線和曲 線,使用筆刷來填充閉合圖形的内部,使用字型來書寫文本。

應用程式通過建立裝置環境(DC),可以直接向指定的裝置進行輸出。裝置環境是一個 GDI管理的結構。其中包含一些有關裝置的資訊,比如它的操作方式及當 前的選擇。應用程式可使用裝置環境函數來建立DC。GDI将傳回一個裝置環境句柄,在随後的調用中,該句柄用于表示該裝置。例如,應用程式可以使用該句柄 來擷取有關該裝置性能的一些資訊,諸如它的類型(顯示器、列印機或其他裝置),它的顯示界面的尺寸和分辨率等。

應用程式可以直接向一個實體設 備進行輸出,比如顯示器或列印機;也可以向一個“邏輯”裝置進行輸出,比如記憶體裝置或元檔案。邏輯裝置向應用程式所提供的保 存輸出結果的格式,可以很容易地将其發送到實體裝置上。一旦應用程式将輸出結果記錄到了一個元檔案中,那麼該元檔案就可以被使用任意多次,并且該輸出結果 可以被發送到任意多個實體裝置上。

應用程式可以使用屬性函數來設定裝置的操作方式和目前的選擇。操作方式包括文本和背景顔色,混色方式(也稱 為二進制光栅操作,用于确定畫筆或筆刷的顔色與繪 圖區域現有的顔色如何進行混色),映射方式(用于指定GDI如何将應用程式所用的坐标映射到裝置坐标系統上)。目前的選擇是指繪圖時使用哪個繪圖對象。

圖形裝置接口函數包括以下幾類:

位圖函數(Bltmap)

位圖是一個圖形對象,可将圖像作為檔案進行建立、處理(比例縮放、滾動、旋轉和繪制)和存儲。

位圖函數提供了一系列處理位圖的方法。

筆刷函數(Brush)

筆 刷是一種繪圖工具,Win32應用程式可使用它繪制多邊形、橢圓形和路徑的内部。繪圖應用程式使用筆刷繪制圖形;字處理應用程式使用筆刷繪制水線;計算 機輔助設計(CAD)應用程式使用筆刷繪制截面視圖的内部;電子表格應用程式使用筆刷繪制餅圖的扇形和直方圖的方條。筆刷函數提供了一系列建立和使用筆刷 的方法。

剪裁函數(Clipping)

剪裁是一種處理過程,它将輸出到某個區域或路徑中的内容限制在應用程式視窗的顯示區内。剪裁函數提供了一系列處理剪裁區域的方法。

顔色函數(Color)

顔色是組成Win32應用程式所生成的圖檔和圖像的一個重要元素。 Win32 API提供了一系列管理和使用畫筆、筆刷、文本和位圖的顔色的函數。

坐标空間及映射函數(Coordinate Space and Transformation)

Win32應用程式使用坐标空間和映射函數對輸出的圖形進行比例縮放、旋轉、轉換、剪裁和反射。

坐标空間是基于笛卡爾坐标系統的一個平面空間。該坐标系統要求有兩個垂直相交的、長度相等的坐标軸。共有4種坐标空間:現實坐标、頁面坐标、裝置坐标、實體裝置坐标(顯示區,或桌面,或列印紙的頁面)。映射方式就是改變(“映射”)對象的大小、方向和形狀的一種算法。

裝置環境函數(Device Context)

設 備環境是一個結構,它定義了一系列圖形對象及其相關的屬性,以及會影響輸出結果的繪圖方式。這些圖形對象包括:畫筆(用于畫直線),筆刷(用于繪圖和填 充),位圖(用于螢幕的拷貝或滾動),調色闆(用于定義可用的顔色集),剪裁區(用于剪裁和其他操作),路徑(用于繪圖和畫圖操作)。裝置環境函數用于對 裝置環境進行建立、删除或擷取資訊。

填充圖形函數(Filled Shape)

填充圖形是一些幾何圖形,其輪廓由目前的畫筆繪制,内部由目前的筆刷填充。共有5種填充圖形:橢圓,弦圖,餅圖,多邊形,矩形。填充圖形函數用于對填充圖形進行操作。

字型和文本函數(Font and Text)

字型用于在視訊顯示器或其他輸出裝置上繪制文本。Win32 API提供了一系列用于安裝、選擇和查詢各種字型的字型和文本函數。

ICM 2.0函數

Microsoft Windows 98和Windows NT 5.0所使用的顔色管理方案稱為 Image Color Management版本 2.0,或ICM2.0,由一系列函數組成。

直線和曲線函數(Line and Curve)

直 線和曲線用于在光栅裝置上繪制輸出圖形。一條直線是光栅顯示器上的一系列高亮像素點(或列印紙上的一系列點),由兩個點進行辨別:起點和終點。一條規則 曲線也是光栅顯示器上的一系列高亮像素點(或列印紙上的一系列點),符合某個二次曲線段的周界(或一部分)。不規則曲線則是由不符合二次曲線段的一系列像 素點組成。

元檔案函數(Metafile)

元檔案是一個結構的集合,這些結構是以與裝置無關的格式存儲圖像。裝置無關是元檔案與位 圖的差異之一。與位圖不同,元檔案保證是與裝置無關的。不過,元文 件有一個缺點:它通常比位圖的繪圖速度慢。是以,如果一個應用程式要求有較快的繪圖速度,而不需要具有裝置無關性,則應該用位圖代替元檔案。

元檔案函數提供了一些對元檔案進行操作的方法。

多顯示器支援函數(Multple Display Monltors)

每個Windows工作站所支援的顯示器個數是不受限制的。可以用建立鄰接區域的方式安排多個顯示器。每個顯示器的大小和顔色深淺都可以獨立設定。

所有的顯示器螢幕一起構成了一個虛拟螢幕。桌面視窗覆寫整個虛拟螢幕,而不僅僅是某個顯示螢幕。由于現有的應用程式都要求顯示器具有一個原點坐标(0,0),是以虛拟螢幕必須在某個顯示器上包含原點坐标(0,0),這個顯示器就被看作是主顯示器。

每個實體顯示裝置都由一個HMONITOR類型的顯示器句柄表示。一個顯示器在它的整個生存期間具有相同的HMONITOR值。

任何顯示裝置環境(DC)的Win32函數所傳回的值都是主顯示器的DC。要想擷取其他顯示器的DC,可使用EnumDisplayMonitors函數。系統對每個顯示器調用回調函數,為該顯示器傳入一個DC值。使用者可以使用該DC在該顯示器上繪圖。

繪圖和畫圖函數(Painting and Drawing)

繪圖和畫圖函數為應用程式提供了一系列在視窗中繪圖的方法,以及如何建立和使用顯示裝置環境(DC)的方法。

路徑函數(Path)

一 個路徑是指一個或多個被填充、被繪制輪廓或既被填充又被繪制輪廓的圖形(或形狀)。Win32應用程式将路徑用作很多用途,在繪圖和畫圖應用程式中使用 路徑。計算機輔助設計(CAD)應用程式用路徑來建立唯一剪裁區,繪制不規則形狀的輪廓,以及填充不規則形狀的内部。路徑函數用于建立、改變和繪制路徑。

畫筆函數(Pen)

畫 筆是Win32應用程式用于繪制直線和曲線的圖形工具。畫圖應用程式使用畫筆來畫手畫線、直線以及曲線。計算機輔助設計(CAD)應用程式用畫筆來畫可見 線、隐藏線、截面線、中心線等等。字處理和桌面出版應用程式用畫筆來畫邊界和水線。電子表格應用程式用畫筆來指明圖表的趨向,以及勾勒直方圖和餅圖的輪 廓。畫筆函數提供了一系列使用畫筆的方法。

列印和列印假脫機函數(Printing and Print Spooler)

Microsoft Windows和Windows NT提供了一套完整的函數,使應用程式可以在不同的裝置上進行列印,如雷射列印機,向量繪圖儀,光栅列印機,以及傳真機等。

矩形函數(Rectangle)

Win32應用程式使用矩形來指定顯示螢幕上或視窗中的一個矩形區域。矩形函數用于對矩形進行操作。

區域函數(Region)

區域是指一個可被填充、着色、轉換和加外框的形狀,包括矩形、多邊形或橢圓(或這幾種形狀的組合),用于完成擊鍵測試(測試光标位置)。

區域函數用于對區域進行操作。

1.2.5 系統服務

系 統服務函數為應用程式提供了通路計算機資源以及底層作業系統特性的手段,比如通路記憶體、檔案系統、裝置、程序和線程。應用程式使用系統服務函數來管理和 監視它所需要的資源。例如,應用程式可使用記憶體管理函數來配置設定和釋放記憶體,使用程序管理和同步函數來啟動和調整多個應用程式或在一個應用程式中運作的多個 線程的操作。

系統服務函數提供了通路檔案、目錄以及輸入輸出(I/O)裝置的手段。應用程式使用檔案I/O函數可以通路儲存在指定計算機以及 網絡計算機上的磁盤和其他 儲存設備上的檔案和目錄。這些函數支援各種檔案系統,從FAT檔案系統,CD-ROM檔案系統(CDFS),到NTFS。

系 統通路函數為應用程式提供了一些可以與其他應用程式共享代碼或資訊的方法。例如,可以将一些有用的過程放到DLL中,使它們對所有的應用程式都可用。應 用程式隻需使用DLL函數将動态連結庫加載進來并擷取各過程的位址,就可以使用這些過程了。通訊函數用于向通訊端口寫入資料及從通訊端口讀出資料,并控制 這些端口的操作方式。有幾種内部通訊(IPC)的方法,比如DDE、管道(Pipe)、郵槽(Mailslot)和檔案映射。對于提供安全屬性的作業系統 來說,應用程式可使用安全函數來通路安全資料,并保護這些資料不會被有意或無意地通路或破壞。

使用系統服務函數可以通路有關系統和其他應用程 序的資訊。應用程式可用系統資訊函數來确定計算機的特别屬性,比如是否出現滑鼠、顯示螢幕上的元素具有多大 尺寸。注冊和初始化函數用于将應用程式的特殊資訊儲存到系統檔案中,以便于該應用程式的新執行個體對象,甚至其他應用程式都可以擷取和使用這些資訊。

應用程式使用系統服務函數可以處理執行過程中的的一些特殊情況,比如錯誤處理、事件日志、異常處理。還有一些屬性可用于調試和提高性能。例如,使用調試函數可對其他程序的執行過程進行單步控制,而性能監視函數則可對某個程序的執行路徑進行跟蹤。

系統服務函數還提供了一些特性,可用于建立其他類型的應用程式,比如控制台應用程式和服務。

系統服務函數包括以下幾類:

通路控制函數(Access Control)

Microsoft Windows NT所提供的安全功能對Win32應用程式是自動使用的。在系統中運作的每個應用程式都受由Windows NT的特殊配置所提供的安全功能所影響。Windows NT是支援Win32安全功能的唯一平台。

Windows NT的安全功能對大多數Win32函數的影響都是最小的,不需要安全功能的Win32應用程式不必合并任何特殊代碼。不過,你可使用Windows NT的安全屬性向Win32應用程式提供一些服務。

通路控制函數提供了一系列控制通路Win32對象(比如檔案)、管理函數(比如設定系統時間或稽核運作動作的函數)的Windows NT安全模型。

原子函數(Atom)

原子表格是一個系統定義的表格,用于儲存字元串和相應的辨別符。應用程式将一個字元串放到原子表格中,并接受一個16位的整數(稱為一個原于),用于通路該字元串。放到原子表格中的字元串被稱為原子名字。

原子函數提供了一系列對原子進行添加、删除、初始化等的操作。

客戶伺服器通路控制函數(Client/Server Access Control)

客戶/伺服器通路控制函數包括三類:

用于模拟客戶機。

用于檢查和設定私有對象上的安全描述符。

用于生成安全時間日志中的稽核消息。

剪貼闆函數(Clipboard)

剪貼闆是由一系列函數和消息組成,Win32應用程式可使用它來傳輸資料。由于所有的應用程式都可以通路剪貼闆,是以資料可以很容易地在應用程式之間或一個應用程式内部進行傳輸。

通訊函數(Communication)

通訊資源是一個實體或邏輯裝置,用于提供雙向的異步資料流。例如,串行端口、并行端口、傳真機以及數據機都是通訊資源。對于每個通訊資源都有一個服務供應程式(包含一個庫或驅動程式),使應用程式可以通路該資源。通訊函數是通訊裝置所使用的函數。

控制台函數(Console)

Microsoft Windows和Windows NT提供了控制台函數,用于管理字元模式的應用程式(這種應用程式未提供自己的圖形使用者界面)的輸入和輸出(I/O)

資料解壓庫函數(Data Decompression Library)

資料解壓庫函數在LZEXPAND.DLL中聲明,用于對壓縮的檔案進行解壓。

調試函數(Debugging)

調試器是一個應用程式,開發人員可使用它來檢查和改正程式設計錯誤。Win32 API的調試函數為使用者提供了一系列的調試手段。

裝置輸入和輸出函數(Device Input and OutPut)

Win32應用程式使用裝置輸入和輸出控制與裝置驅動程式進行通訊。被通路的裝置由裝置句柄辨別;而裝置驅動程式要完成的動作則由控制代碼來指定。

動态資料交換函數(Dynamic Data Exchange)

Win32 API為不能使用“動态資料交換管理庫(DDEML)”的應用程式提供了一系列實作動态資料交換的函數。

動态資料交換管理函數(Dynamic Data Exchange Management)

動态資料交換(DDE)是一種内部通訊方式,即使用共享記憶體在應用程式之間交換資料。應用程式可以使用DDE進行一次性的資料傳輸,以及資料的即時交換和更新。

動态資料交換管理函數為使用者提供了一系列管理動态資料交換的手段。

動态連結庫函數(Dynamic-Link Library)

動态連接配接庫(DLL)是由函數和資料組成的一些子產品。一個DLL是由它的調用子產品(.EXE或.DLL)在運作時加載的。當一個DLL被加載後,它就被映射到其調用程序的位址空間中。

DLL可以定義兩種函數:外部的和内部的。外部函數可以被其他子產品調用,内部函數隻能在聲明它的OLL内部被調用。盡管DLL可以輸出資料,但它的資料通常隻能由它的函數使用。

DLL提供了一種使應用程式子產品化的方法,這樣就可以更容易地更新和重用程式的功能。DLL也有助于在幾個應用程式同時使用相同的功能時減少記憶體開銷,因為雖然每個應用程式都擁有一份資料的備份,但它們可以共享代碼。

錯誤函數(Error)

寫 得好的應用程式應包括一些能夠處理意外錯誤并可從錯誤中順利恢複的代碼。當發生錯誤時,應用程式可能需要使用者進行幹預,或自己恢複。在一些極端情況下, 應用程式對能會将使用者從系統中退出或關機。錯誤函數為使用者痰腛LL内部被調用。盡管DLL可以輸出資料,但它的資料通常隻能由它的函數使用。

DLL提供了一種使應用程式子產品化的方法,這樣就可以更容易地更新和重用程式的功能。DLL也有助于在幾個應用程式同時使用相同的功能時減少記憶體開銷,因為雖然每個應用程式都擁有一份資料的備份,但它們可以共享代碼。

錯誤函數(Error)

寫得好的應用程式應包括一些能夠處理意外錯誤并可從錯誤中順利恢複的代碼。當發生錯誤時,應用程式可能需要使用者進行幹預,或自己恢複。在一些極端情況下,應用程式對能會将使用者從系統中退出或關機。錯誤函數為使用者提供了一些進行錯誤處理的方法。

事件日志函數(Event Logging)

很 多應用程式都在不同的屬性錯誤日志中記錄錯誤和事件。這些屬性錯誤日志具有不同的格式,并顯示不同的使用者界面,而且無法将資料合并起來得到一個完整的報 告。是以,使用者必須要檢查各種資料來診斷問題。Windows NT的事件日志為應用程式(和作業系統)提供了一種标準、集中的方法,來記錄重要的軟體和硬體事件。事件日志服務将事件從不同的地方儲存到一個稱為“事件 日志”的集合中。Windows NT還提供了一個事件浏覽器和程式設計接口,用于檢視日志和檢查日志。事件日志函數提供了一系列編寫和檢查事件日志的方法。

檔案函數(File)

檔案是計算機存儲資訊的基本機關,不同的資訊可分别存放在不同的檔案中。應用程式可使用檔案函數對檔案進行輸入和輸出(I/O)操作。

檔案安裝庫函數(File Installation Library)

Win32 API包含一個檔案安裝庫,應用程式使用它可以更容易地安裝檔案,使安裝程式能分析目前已安裝的檔案。

檔案映射函數(File Mapping)

檔案映射函數用于對檔案映射對象進行操作。

檔案系統函數(File System)

Win32應用程式依賴檔案系統來儲存和擷取儲存設備上的資訊。檔案系統提供了應用程式在與儲存設備相關的個别卷上建立和通路檔案及目錄時所需的底層支援。

每個檔案系統都由一個或多個驅動程式和所支援的動态連結庫(定義檔案系統的資料格式和特性)組成。它們确定了檔案名的約定、安全性及可恢複性的級别,以及輸入輸出(I/O)操作的一般性能。檔案系統函數用于對檔案系統進行操作。

句柄和對象函數(Handle and Object)

對 象是一個表示系統資源的資料結構,比如表示一個檔案、線程或圖像。應用程式不能直接通路對象所表示的對象資料或系統資源,而是必須使用對象句柄。對象句 柄可用于檢查和修改系統資源。每個句柄在一個内部維護的表中都有一項。在這些項中包含資源的位址以及辨別資源類型的方法。句柄和對象函數用于對句柄和對象 進行操作。

Hook函數

Hook是系統消息處理機制中的一部分。在系統消息處理機制中,應用程式可安裝一個子程式來監視系統中的消息傳送情況,并可處理某些類型的消息(在這些消息到達目的視窗過程之前)。Hook函數用于對Hook進行操作。

lmageHlp函數

lmageHlp函數由IMAGEHLP DLL提供。lmageHlp函數可用于PE格式的圖像。PE圖像由一個相容的Win32連接配接程式提供,比如由Microsoft Developer Studio提供。

超大整數操作函數(Large Integer Operations)

Win32 API提供了一系列超大整 郵槽是一種單向的内部處理通訊(IPC)機制。Win32應用程式可以在郵槽中儲存消息,郵槽的所有者可以擷取儲存在其中的消息。這些消息通常是通過網絡 發送到一台指定的計算機上,或發送到某個指定域中的所有計算機上。域是一組工作站和伺服器,共享一個組名。

可以選擇使用命名管道來代替郵槽進行内部處理通訊。命名管道是兩個程序交換消息的一種簡單方法。而郵槽則是一個程序向多個程序廣播消息的一種簡單方法。需要考慮的重要一點是郵槽使用郵包,而命名管道則不用。郵槽函數可用于建立郵槽、設定或擷取郵槽資訊。

記憶體管理函數(Memory Management)

記憶體管理函數用于配置設定和使用記憶體。

管道函數(Pipe)

管道是一段共享記憶體,用于程序通訊。建立管道的程序稱為管道服務程式。連接配接管道的程序稱為管道客戶程式。某個程序向管道中寫入資訊,然後其他程序從管道中讀出資訊。管道函數用于建立、管理和使用管道。

電源管理函數(Power Management)

電源管理函數用于對計算機的電源進行管理。

程序和線程函數(Process and Thread)

一 個Win32應用程式由一個或多個程序組成。在最簡單的條件下,一個程序就是一個可執行程式,在該程序的環境中運作一個或多個線程。線程是作業系統配置設定 處理器時間的基本機關。一個線程可以執行程序代碼的任何部分,包括正被其他線程執行的部分。一個“纖度”(Fiber)是一個執行機關,必須由應用程式手 工排程。“纖度”在排程它的線程環境中運作。

作業對象允許程序組被作為一個機關進行管理。作業對象是可命名、可得到及可共享的對象,用于控制與其相關的程序的屬性。在作業對象上完成的操作會影響所有與該作業對象相關的程序。

程序和線程函數包括三類函數:程序和線程函數、作業對象函數、“纖度”函數。

注冊函數(Registry)

系統資料庫是一個系統定義的資料庫,應用程式和系統構件可使用它來儲存和擷取配置資料。注冊函數用于對系統資料庫進行操作。

字元串處理函數(string Manipulation)

字元串處理函數用于對字元串進行處理。

結構化的異常處理函數(Structured Exception Handling)

異 常是在程式執行過程中發生的一種事件,發生異常時需要執行正常的控制流程以外的代碼。共有兩種異常:硬體異常和軟體異常。硬體異常是由CPU引發的,可 能由于執行了某些指令序列而産生,比如除零操作,或通路一個無效的記憶體位址。軟體異常是由應用程式或作業系統顯式地引發。例如,當系統檢測出一個無效的參 數值時就會引發一個異常。

結構化的異常處理是一種同時處理軟體異常和硬體異常的機制。是以,在程式中可用作對硬體和軟體異常一起進行處理。使用結構化的異常處理使使用者可以完全控制對異常的處理,為調試器提供支援,并且對所有程式設計語言和機器都是可用的。

同步函數(Synchronization)

Win32 API提供了各種方法來調整執行過程中的多個程序。同步函數為線程提供了一系列對資源通路進行同步的機制。

系統資訊函數(System Information)

系統資訊函數用于修改系統的配置、設定和屬性。

系統消息函數(System Message)

系統消息函數用于向一些系統部件發送系統消息,比如應用程式、網絡驅動器、系統級裝置驅動器等。

系統關機函數(System Shutdown)

應用程式可使用系統關機函數将目前的使用者退出系統、關機,或鎖定工作站。

錄音帶備份函數(Tape Backup)

備份應用程式可使用錄音帶備份函數從錄音帶中讀取資料,向錄音帶中寫入資料,初始化錄音帶,以及擷取錄音帶或錄音帶驅動資訊。

時間函數(Time)

Microsoft Windows和Windows NT提供了各種日期和時間函數,用于擷取和設定系統及個别檔案的日期和時間。

使用時間函數可以檢查和修改日期及時間。

計時器函數(Timer)

計時器是一個内部例程,它反複地測量一個指定的時間間隔(以毫秒為機關)。

計時器函數用于對計時器進行操作。

工具幫助函數(Tool Help)

由“工具幫助庫”所提供的函數可使使用者更容易地擷取有關目前正在執行的Win32應用程式的資訊,為使用者提供工具幫助服務。

視窗站和桌面函數(Window Station and Desktop)

視窗工作站和桌面函數主要是為Win32服務的開發人員提供的,用于對新的視窗工作站和桌面功能進行操作。開發由登入使用者使用的典型應用程式的開發人員不必考慮視窗工作站和桌面。

Windows NT 4.0通路控制函數(Windows NT 4.0 Access-Control)

Windows NT 4.0通路控制函數用于對安全描述符和通路控制清單(ACL)進行操作。在更高版本的Windows NT中也支援這些函數。

Windows NT 4.0通路控制函數是Microsoft Win32提供的三套通路控制函數之一。

WinTrust函數

WinTrust函數用于對指定的主題進行指定确認。

1.2.6 國際特性

這 些特性有助于使用者編寫國際化的應用程式。Unicode字元集使用16位的字元值來表示計算過程中所用的字元,比如各種符号,以及很多程式設計語言。國家語 言支援(NLS)函數可幫助使用者将應用程式本地化;輸入方法編輯器(IME)函數(在Windows亞洲版中可用)用于幫助使用者輸入包含Unicode和 DCBS字元的文本。

國際特性函數包括以下幾類:

輸入方法編輯器函數(Input Method Editor)

輸入方法編輯器(IME)有助于簡化使用者的文本輸入過程(文本中包含Unicode字元和雙位元組字元DBCS)。

輸入方法編輯器函數用于建立和管理IME視窗。

國家語言支援函數(National Language Support)

使用國家語言支援函數可以幫助Win32應用程式支援世界各地的不同語言,滿足不同地區使用者的特殊需要。

Unicode和字元集函數(Unicode and Character Set)

Win32 API通過Unicode和傳統字元集可以支援國際上的很多不同的書寫語言。Unicode是一種世界通用的字元編碼标準,它使用16位的字元值來表示各 種字元,包括技術符号和出版所用的特殊字元。傳統字元集是指以前所用的字元編碼标準,比如Windows ANSI字元集,它是使用8位的字元值或8位值的組合來表示在指定的語言或地理區域中所用的字元。

Unicode和字元集函數用于對字元集進行操作。

1.2.7 網絡服務

網絡函數允許網絡上的不同計算機的應用程式之間進行通訊。

網絡函數用于在網絡中的各計算機上建立和管理共享資源的連接配接,例如共享目錄和網絡列印機。

網絡接口包括Windows網絡函數、Windows套接字(Socket)、NetBIOS、RAS、SNMP、Net函數,以及網絡DDE。Windows 95隻支援這些函數中的一部分。

網絡服務函數包括以下幾類:

DLC函數(DLC)

資料連接配接控制(DLC)接口是一個具有特殊目的的、不可路由的協定。它不是用于運作Windows和Windows NT的計算機之間的通訊,而是為運作Windows或Windows NT的計算機與IBM主機或直接連接配接到網絡上的列印機之間提供了連通性。

網絡函數(Net)

對 于基于OS/2的伺服器來說,Microsoft LAN Manager所支援的Net函數提供了很多網絡作業系統所需的功能,這些功能在本地作業系統中被忽略了。Windows NT、Windows 95和Windows 98具有很多内置的網絡功能,是以,有些原始的Net函數就不再支援了。

Windows NT、Windows 95和Windows 98支援多種網絡函數。Net函數集提供了一些其他網絡函數來覆寫的附加功能。另外,還可以使用這些函數來監測和管理基于OS/2的LAN Mansger伺服器。

NetBIOS函數

Win32應用程式可以使用Network Basic Input/Output System(NetBIOS)接口與網絡中的其他計算機上的應用程式進行通訊。

NetBIOS接口包括一系列顯式指令,由一個被稱為網絡控制塊(NCB)的結構提供。應用程式可以對任何支援NetBIOS接口的協定發出NetBIOS指令。

網絡DDE函數(Networking DDE)

一個程序可以使用Win32 API提供的網絡動态資料交換(DDE)函數與在網絡中的不同計算機上運作的程序建立會話。

RAS伺服器管理函數(RAS Server Administration)

在Windows NT 4.0上,可使用RAS伺服器管理函數來實作RAS伺服器管理功能。Windows 95不提供RAS伺服器支援。

遠端通路服務函數(Remote Access Service)

使用遠端通路服務(RAS)可以使遠端使用者猶如直接連接配接到計算機網絡上一樣地通路一個或多個RAS伺服器。

遠端通路服務函數用于實作遠端通路服務功能。

服務函數(Service)

Win32 API提供了一套完整的服務函數。這些函數應該可以代替NetService函數,除非需要控制LANManager2.x伺服器上的服務。

服務函數用于控制服務。一個服務就是一個應用程式,管理者可以使用服務控制程式接口來控制服務。

Windows網絡函數(Windows Networking)

Windows提供的Windows網絡(Wnet)函數使使用者可以在應用程式中實作網絡功能,而不需使用特殊的網絡供應程式或實體的網絡實作。原因是Wnet函數是網絡無關的。

1.3綜述

出于篇幅和普适性考慮,本書将隻收錄5大類函數說明,它們分别是:視窗管理,圖形裝置接口,系統服務,國際特性,網絡服務。 

繼續閱讀