程序調試常用API

 

 

  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

 

發佈了160 篇原創文章 · 獲贊 94 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章