1. 程式人生 > >Windows程序內部運行機制

Windows程序內部運行機制

key visual 工程 實現 設備 英文 輸出 選擇 當前

API:應用程序接口(英語:Application Programming Interface,簡稱:API),又稱為應用編程接口,就是軟件系統不同組成部分銜接的約定。

作用:提供應用程序與開發人員以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。提供API所定義的功能的軟件稱作此API的實現。API是一種接口,故而是一種抽象。

Windows API : API函數包含在Windows系統目錄下的動態連接庫文件中。Windows API是一套用來控制Windows的各個部件的外觀和行為的預先定義的Windows函數。用戶的每個動作都會引發一個或幾個函數的運行以告訴Windows發生了什麽。這在某種程度上很像Windows的天然代碼。而其他的語言只是提供一種能自動而且更容易的訪問API的方法。當你點擊窗體上的一個按鈕時,Windows會發送一個消息給窗體,VB獲取這個調用並經過分析後生成一個特定事件。

更易理解來說:Windows系統除了協調應用程序的執行、內存的分配、系統資源的管理外,同時他也是一個很大的服務中心。調用這個服務中心的各種服務(每一種服務就是一個函數)可以幫助應用程序達到開啟視窗、描繪圖形和使用周邊設備等目的,由於這些函數服務的對象是應用程序,所以稱之為Application Programming Interface,簡稱API 函數。WIN32 API也就是MicrosoftWindows 32位平臺的應用程序編程接口。

凡是在 Windows工作環境底下執行的應用程序,都可以調用Windows API。

SDK:軟件開發工具包(Software Development Kit,即SDK)一般是一些被軟件工程師用於為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件的開發工具的集合。

作用:為某個程序設計語言提供應用程序接口的一些文件,但也可能包括能與某種嵌入式系統通訊的復雜的硬件。一般的工具包括用於調試和其他用途的實用工具。SDK還經常包括示例代碼、支持性的技術註解或者其他的為基本參考資料澄清疑點的支持文檔。DK經常可以直接從互聯網下載

窗口:一個Windows應用程序至少要有一個窗口,稱為主窗口。用於進行交互的接口,用於輸入與輸出。窗口通過窗口句柄來標識。對窗口來操作,首先要得到句柄。

分類:分為客戶區和非客戶區

句柄(HANDLE):是一個概念,系統在創建窗口,圖標,光標這些資源時會為他們分配資源,並返回這些資源的標識號,即句柄

舉例如:圖標句柄(HICON),光標句柄(HCURSOR),畫刷句柄(HBRUSH)

消息(了解):由MSG結構體表示

typedef struct tagMSG {

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

該結構體中各成員變量的含義如下:

第一個成員變量hwnd表示消息所屬的窗口。我們通常開發的程序都是窗口應用程序,一個消息一般都是與某個窗口相關聯的。例如,在某個活動窗口中按下鼠標左鍵,產生的按鍵消息就是發給該窗口的。在Windows程序中,用HWND類型的變量來標識窗口。

第二個成員變量message指定了消息的標識符。在Windows中,消息是由一個數值來表示的,不同的消息對應不同的數值。但是由於數值不便於記憶,所以Windows將消息對應的數值定義為WM_XXX宏(WM是Window Message的縮寫)的形式,XXX對應某種消息的英文拼寫的大寫形式。例如,鼠標左鍵按下消息是WM_LBUTTONDOWN,鍵盤按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我們通常都是以WM_XXX宏的形式來使用消息的。

提示:如果想知道WM_XXX消息對應的具體數值,可以在Visual C++開發環境中選中WM_XXX,然後單擊鼠標右鍵,在彈出菜單中選擇goto definition,即可看到該宏的具體定義。跟蹤或查看某個變量的定義,都可以使用這個方法。

第三、第四個成員變量wParam和lParam,用於指定消息的附加信息。例如,當我們收到一個字符消息的時候,message成員變量的值就是WM_CHAR,但用戶到底輸入的是什麽字符,那麽就由wParam和lParam來說明。wParam、lParam表示的信息隨消息的不同而不同。如果想知道這兩個成員變量具體表示的信息,可以在MSDN中關於某個具體消息的說明文檔查看到。讀者可以在VC++的開發環境中通過goto definition查看一下WPARAM和LPARAM這兩種類型的定義,可以發現這兩種類型實際上就是unsigned int和long。

最後兩個變量分別表示消息投遞到消息隊列中的時間和鼠標的當前位置。

消息隊列:存放程序創建的窗口的信息

消息分類:進隊消息(放到應用程序的消息隊列,然後再取出發送),不進隊消息(直接發送給窗口)

Windows程序內部運行機制