windows编程之API学习

读一份代码,权当慢慢积累API了
WNDCLASS:结构WNDCLASS包含一个窗口类的全部信息,也是Windows编程中使用的基本数据结构之一,应用程序通过定义一个窗口类确定窗口的属性。
要得到某一窗口的WNDCLASS,可以用GetClassLong();.
WNDCLASS中的回调函数是窗体的消息处理函数:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

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(0,"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   3   //只是为了让程序崩溃
  return   0;   
}

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   将所申请内存初始化为0.
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 + 4];//适配器名称
    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//适配器描述
    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名称
返回值:
如果函数成功,返回值是一个非零值。
如果函数失败,返回值是零。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值