- 論壇徽章:
- 0
|
現(xiàn)在很多講Windows程序設(shè)計的書都是講基于MFC庫和OWL庫的Windows設(shè)計,對Windows實現(xiàn)的細(xì)節(jié)都鮮有討論,而調(diào)試程序都是和系統(tǒng)底層打交道,所以有必要掌握一些Win32 API函數(shù)的知識,這樣我們可快捷地找出程序調(diào)用錯在哪?是哪個參數(shù)出了問題。
Windows程序模塊包括KERNEL、USER和GDI,其中KERNEL完成內(nèi)存管理、程序的裝人與執(zhí)行和任務(wù)調(diào)度等功能,它需要調(diào)用原MS―DOS中的文件管理、磁盤輸入輸出和程序執(zhí)行等功能;USER是一個程序庫,它用來對聲音、時鐘、鼠標(biāo)器及鍵盤輸入等操作進(jìn)行管理;GDI是一功能十分豐富的子程序庫,它提供了圖形與文字輸出、圖象操作和窗口管理等各種與顯示和打印有關(guān)的功能。上述KERNEL、USER和GDI模塊中的庫函數(shù)可被應(yīng)用程序調(diào)用,也可被其他程序模塊調(diào)用。把包含庫函數(shù)的模塊稱為輸出者(export)。你應(yīng)明白為什么跟蹤軟件時經(jīng)常在KERNEL32!。text和USER32.text等系統(tǒng)領(lǐng)空轉(zhuǎn)的問題吧。
這里列出幾個經(jīng)常碰到的Win 32 API函數(shù),它們都是存在Windows系統(tǒng)核心文件KERNEL32.DLL中和視窗管理文件USER32.DLL中。
Windows函數(shù)是區(qū)分字符集的:A表示ANSI,W表示W(wǎng)ide,即Unicode (Wide character-set),前者就是通常使用的單字節(jié)方式,但這種方式處理象中文這樣的雙字節(jié)字符不方便,容易出現(xiàn)半個漢字的情況。而后者是雙字節(jié)方式,方便處理雙字節(jié)字符。Windows的所有與字符有關(guān)的函數(shù)都提供兩種方式的版本。盡管你編程時使用GetWindowText,但實際上編譯程序會根據(jù)設(shè)置自動調(diào)用GetWindowTextA或GetWindowTextW.函數(shù)的最后一個字母告訴我們函數(shù)是使用單字節(jié)還是雙字節(jié)字符串。
1、Hmemcpy函數(shù)
void hmemcpy(hpvDest, hpvSource, cbCopy)
void _huge* hpvDest; // 目的數(shù)據(jù)地址
const void _huge* hpvSource; // 源數(shù)據(jù)地址
long cbCopy; // 數(shù)據(jù)大小 (Bytes)
這個函數(shù)在KERNEL32.DLL中,它很常用,俗稱萬能斷點,但一般的編程書籍上很少提到,原因它是底層的東西,沒有特殊需要,一般不直接調(diào)用。但的確它是很有用的!有意思的是它執(zhí)行的操作很簡單,只是將內(nèi)存中的一塊數(shù)據(jù)拷貝到另一個地方。
注意:此函數(shù)只在Windows 9x系統(tǒng)上有效,在Win NT/2K系統(tǒng)上相關(guān)的函數(shù)是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再調(diào)用memcpy來處理數(shù)據(jù)了,用此函數(shù)設(shè)斷基本上什么也攔不住。
2、GetWindowText函數(shù)
此函數(shù)在USER32.DLL用戶模塊中,它的作用是復(fù)制指定窗口中的字符到緩沖區(qū)。函數(shù)原型:
int GetWindowText(
HWND hWnd//欲獲取文字的那個窗口的句柄
LPTSTR lpString //預(yù)定義的一個緩沖區(qū),至少有cch+1個字符大小;隨同窗口文字載入
int nMaxCount//lpString緩沖區(qū)的長度
);
16位:GetWindowText
32位:GetWindowTextA,GetWindowTextW
<strong>3、GetDlgItemText</strong>
3、GetDlgItemText
此函數(shù)在USER32.DLL用戶模塊中,它的作用是返回對話框中某一個窗口的標(biāo)題或文字。函數(shù)原型:
UINT GetDlgItemText(
HWND hDlg, // 對話框句柄
int nIDDlgItem, //控制標(biāo)識符
LPTSTR lpString, / 預(yù)定義的一個字符緩沖區(qū)
int nMaxCount// 字符緩沖區(qū)的長度
);
16位:GetDlgItemText
32位:GetDlgItemTextA,GetDlgItemTextW
4、MessageBox函數(shù)
此函數(shù)是在USER32.DLL用戶模塊中,它的作用創(chuàng)建、顯示和操作信息框。函數(shù)原型:
int MessageBox(
HWND hWnd, //窗口句柄
LPCTSTR lpText, // 信息框中文字的地址
LPCTSTR lpCaption, // 信息框標(biāo)題地址
UINT uType // 信息框類型
);
16位:MessageBox
32位:MessageBoxA,MessageBoxW |
|