天天看點

windows程式設計之API學習

讀一份代碼,權當慢慢積累API了

WNDCLASS:結構WNDCLASS包含一個視窗類的全部資訊,也是Windows程式設計中使用的基本資料結構之一,應用程式通過定義一個視窗類确定視窗的屬性。

要得到某一視窗的WNDCLASS,可以用GetClassLong();.

WNDCLASS中的回調函數是窗體的消息處理函數:

SetUnhandleExceptionFilter()函數,讓程式優雅的崩潰

這個函數的傳回值有三種情況:

EXCEPTION_EXECUTE_HANDLER equ 1 表示我已經處理了異常,可以優雅地結束了

EXCEPTION_CONTINUE_SEARCH equ 0 表示我不處理,其他人來吧,于是windows調用預設的處理程式顯示一個錯誤框,并結束

EXCEPTION_CONTINUE_EXECUTION equ -1 表示錯誤已經被修複,請從異常發生處繼續執行

使用方法:

#include  <windows.h>   
long   __stdcall   callback(_EXCEPTION_POINTERS*   excp)   
{   
  MessageBox(,"Error","error",MB_OK);   
  printf("Error   address   %x/n",excp->ExceptionRecord->ExceptionAddress);   
  printf("CPU   register:/n");   
  printf("eax   %x   ebx   %x   ecx   %x   edx   %x/n",excp->ContextRecord->Eax,   
  excp->ContextRecord->Ebx,excp->ContextRecord->Ecx,   
  excp->ContextRecord->Edx);   
  return   EXCEPTION_EXECUTE_HANDLER;   
}

int   main(int   argc,char*   argv[])   
{   
  SetUnhandledExceptionFilter(callback);   
  _asm   int      //隻是為了讓程式崩潰
  return   ;   
}
           

GetTickCount():傳回從作業系統啟動所經過的毫秒數,傳回值是DWORD

PathFileExists():确定一個檔案或目錄的檔案系統對象的路徑是否是有效的

GlobalAlloc():GlobalAlloc是一個Windows API函數。該函數從堆中配置設定一定數目的位元組數。Win32記憶體管理器并不提供互相分開的局部和全局堆。提供這個函數隻是為了與16位的Windows相相容。簡稱全局堆配置設定

HGLOBALGlobalAlloc(
UINTuFlags, // 配置設定屬性(方式)
DWORDdwBytes // 配置設定的位元組數
);
           

uFlags

指定如何配置設定記憶體,若指定為0,則是預設的GMEM_FIXED.這個值可以是下面其中一個或幾個位辨別(那些指明不相容的組合除外)

辨別的含意

GHND    為GMEM_MOVEABLE 和 GMEM_ZEROINIT的組合.
GMEM_FIXED  配置設定固定的記憶體,傳回值是一個指針.
GMEM_MOVEABLE   
配置設定可移動的記憶體,在Win32中記憶體塊在實體記憶體中是不可移動的,但在預設堆中可以. 傳回值是該記憶體對象的句柄,可使用函數 GlobalLock 将該句柄轉換為一個指針.
這個辨別不能與 GMEM_FIXED 組合使用.
GMEM_ZEROINIT   将所申請記憶體初始化為.
GPTR    為GMEM_FIXED和GMEM_ZEROINIT組合.
           

dwBytes

指定要申請的位元組數.若該參數為 0 且參數 uFlags 指定為 GMEM_MOVEABLE 則該函數傳回一個記憶體對象的句柄,該記憶體對象被辨別為discarded(可抛棄的)。

IP_ADAPTER_INFO:

結構體IP_ADAPTER_INFO包含本地計算機某一個網絡擴充卡的資訊。

#define MAX_ADAPTER_NAME_LENGTH 256
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128
#define MAX_ADAPTER_ADDRESS_LENGTH 8
typedef struct _IP_ADAPTER_INFO {
    struct _IP_ADAPTER_INFO* Next;//指向連結清單中下一個擴充卡資訊的指針
    DWORD ComboIndex;//預留值
    char AdapterName[MAX_ADAPTER_NAME_LENGTH + ];//擴充卡名稱
    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + ];//擴充卡描述
    UINT AddressLength;//擴充卡硬體位址以位元組計算的長度
    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//硬體位址以BYTE數組所表示
    DWORD Index;//擴充卡索引
    UINT Type;//擴充卡類型
    UINT DhcpEnabled;//指定這個擴充卡是否開啟DHCP
    PIP_ADDR_STRING CurrentIpAddress;//預留值
    IP_ADDR_STRING IpAddressList;//該擴充卡的IPv4位址連結清單
    IP_ADDR_STRING GatewayList;//該擴充卡的網關IPv4位址連結清單
    IP_ADDR_STRING DhcpServer;//該擴充卡的DHCP伺服器的IPv4 位址連結清單
    BOOL HaveWins;
    IP_ADDR_STRING PrimaryWinsServer;
    IP_ADDR_STRING SecondaryWinsServer;
    time_t LeaseObtained;
    time_t LeaseExpires;
} IP_ADAPTER_INFO,*PIP_ADAPTER_INFO;
           

結構體ADAPTER_INFO隻限制于擷取本地計算機網絡擴充卡的IPv4資訊,該結構體通過調用GetAdaptersInfo函數擷取值。

GetAdaptersInfo():

使用GetAdaptersInfo擷取網卡詳細資訊

//PIP_ADAPTER_INFO結構體指針存儲本機網卡資訊
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
    //得到結構體大小,用于GetAdaptersInfo參數
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
    //調用GetAdaptersInfo函數,填充pIpAdapterInfo指針變量;其中stSize參數既是一個輸入量也是一個輸出量
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
           

GetComputerName():擷取計算機名

BOOL WINAPI GetComputerName(
__out LPTSTR lpBuffer,
__inout LPDWORD lpnSize
);
功能:從系統資料庫中檢索本地計算機的NetBIOS名稱
傳回值:
如果函數成功,傳回值是一個非零值。
如果函數失敗,傳回值是零。
           

繼續閱讀