Windows程序模塊包括KERNEL、USER和GDI,其中KERNEL完成內存管理、程序的裝人與執行和任務調度等功能,它需要調用原MS―DOS中的文件管理、磁盤輸入輸出和程序執行等功能;
USER是一個程序庫,它用來對聲音、時鐘、鼠標器及鍵盤輸入等操作進行管理;
GDI是一功能十分豐富的子程序庫,它提供了圖形與文字輸出、圖象操作和窗口管理等各種與顯示和打印有關的功能。
上述KERNEL、USER和GDI模塊中的庫函數可被應用程序調用,也可被其他程序模塊調用。把包含庫函數的模塊稱爲輸出者(export)。
這裏列出幾個經常碰到的Win 32 API函數,它們都是存在Windows系統核心文件KERNEL32.DLL中和視窗管理文件USER32.DLL中。
Windows函數是區分字符集的:A表示ANSI,W表示Wide,即Unicode (Wide character-set),前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。而後者是雙字節方式,方便處理雙字節字符。Windows的所有與字符有關的函數都提供兩種方式的版本。儘管你編程時使用GetWindowText,但實際上編譯程序會根據設置自動調用GetWindowTextA或GetWindowTextW。函數的最後一個字母告訴我們函數是使用單字節還是雙字節字符串。
1、 Hmemcpy函數
void hmemcpy(hpvDest, hpvSource, cbCopy)
void _huge* hpvDest; // 目的數據地址
const void _huge* hpvSource; // 源數據地址
long cbCopy; // 數據大小 (Bytes)
這個函數在KERNEL32.DLL中,它很常用,俗稱萬能斷點,但一般的編程書籍上很少提到,原因它是底層的東西,沒有特殊需要,一般不直接調用。但的確它是很有用的!有意思的是它執行的操作很簡單,只是將內存中的一塊數據拷貝到另一個地方。
注意:此函數只在Windows 9x系統上有效,在Win NT/2K系統上相關的函數是memcpy,但在Win NT/2K上不同於Windows 9x上,很少再調用memcpy來處理數據了,用此函數設斷基本上什麼也攔不住。
2、 GetWindowText函數
此函數在USER32.DLL用戶模塊中,它的作用是複製指定窗口中的字符到緩衝區。函數原型:
int GetWindowText(
HWND hWnd//欲獲取文字的那個窗口的句柄
LPTSTR lpString //預定義的一個緩衝區,至少有cch+1個字符大小;隨同窗口文字載入
int nMaxCount//lpString緩衝區的長度
);
16位:GetWindowText
32位:GetWindowTextA,GetWindowTextW
3、 GetDlgItemText
此函數在USER32.DLL用戶模塊中,它的作用是返回對話框中某一個窗口的標題或文字。函數原型:
UINT GetDlgItemText(
HWND hDlg, // 對話框句柄
int nIDDlgItem, //控制標識符
LPTSTR lpString, / 預定義的一個字符緩衝區
int nMaxCount// 字符緩衝區的長度
);
16位:GetDlgItemText
32位:GetDlgItemTextA,GetDlgItemTextW
4、 MessageBox函數
此函數是在USER32.DLL用戶模塊中,它的作用創建、顯示和操作信息框。函數原型:
int MessageBox(
HWND hWnd, //窗口句柄
LPCTSTR lpText, // 信息框中文字的地址
LPCTSTR lpCaption, // 信息框標題地址
UINT uType // 信息框類型
);
16位:MessageBox
32位:MessageBoxA,MessageBoxW