讀一份代碼,權當慢慢積累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名稱
傳回值:
如果函數成功,傳回值是一個非零值。
如果函數失敗,傳回值是零。