(笔记)涉及到的WinAPI函数

来源:互联网 发布:装修空气检测 知乎 编辑:程序博客网 时间:2024/05/21 21:50
WSAStartup
即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令。是Windows下的网络编程接口软件Winsock1 或 Winsock2 里面的一个命令(Ps:Winsock 是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口)。
WSAStartup必须是应用程序或DLL调用的第一个Windows Sockets函数。它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节。应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数。
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData);
为了在应用程序当中调用任何一个Winsock AP函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
⑴ wVersionRequested:一个WORD(双字节)型数值,在最高版本的Windows Sockets支持调用者使用,高阶字节指定小版本(修订本)号,低位字节指定主版本号。
⑵lpWSAData 指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。
WindowsSockets API提供的调用方可使用的最高版本号。高位字节指出副版本(修正)号,低位字节指明主版本号。
返回值:
0 成功。
否则返回下列的错误代码之一。注意通常依靠应用程序调用WSAGetLastError()机制获得的错误代码是不能使用的,因为Windows Sockets DLL可能没有建立“上一错误”信息储存的客户数据区域。
GetModuleFileNameA
检索包含指定模块的文件的绝对路径。模块必须由当前进程加载。
如果第一个参数为NULL,返回当前进程的可执行文件的路径。

strrchr()

 查找一个字符串在另一个字符串中 末次出现的位置,并返回从字符串中的这个位置起,一直到字符串结束的所有字符;如果未能找到指定字符,那么函数将返回False。
例子:
strrchr(FilePath,'\\')[1]=0
从FilePath的右边开始查找"\"这个字符, 然后把这个字符的下一个字符设为0,即空字符.因为stttchr会返回一个字符指针,它代表FilePath中从"\"开始的字符串.
上面的代码相当于 char * p = strrchr(FilePath,'\\'); p[1] = 0; FilePath中就只剩下路径,而没有文件名了.

如“D:\1.exe”;
(strrchr(FilePath,'\\'))是查找'\\'即斜杆最后一次出现的位置指针,即“D:\1.exe”中斜杆的位置的指针。
(strrchr(FilePath,'\\'))[1]=0;是将斜杆后面的一个字符作为字符串结束符。即此时FilePath变为“D:\”。
最后再加上filname,如“2.exe”,最后FileName变为“D:\2.exe”。

WNDCLASS
结构WNDCLASS包含一个窗口类的全部信息,也是Windows编程中使用的基本数据结构之一,应用程序通过定义一个窗口类确定窗口的属性。
WNDCLASS是一个由系统支持的结构,用来储存某一类窗口的信息,如ClassStyle,消息处理函数,Icon,Cursor,背景Brush等。也就是说,CreateWindow只是将某个WNDCLASS定义的窗体变成实例。
要得到某一窗口的WNDCLASS数据,可以用GetClassLong();
RegisterClass()就是在系统注册某一类型的窗体。也就是将你提供的WNDCLASS数据注册为一个窗口类,在WNDCLASS.lpszClassName中定义该WNDCLASS的标识,
无论CreateWindow或CreateWindowEx创建的窗口都必须对应一个WNDCLASS,但一个WNDCLASS可以有多个窗口对象。
有一些系统预定义的窗口类,如:
ClassName=_T("BUTTON" or "COMBOBOX" or "EDIT" or "LISTBOX" or "MDICLIENT" or "SCROLLBAR" or "STATIC")
要用这些窗体,直接用CreateWindow创建相应对象就是了。
要得到某一窗口的窗口类,可以用GetClassName();
WNDCLASS中的回调函数是窗体的消息处理函数:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
lParam)
typedef struct _WNDCLASS {UINT style;// 窗口类型WNDPROC lpfnWndProc;//窗口处理函数int cbClsExtra;//窗口扩展int cbWndExtra;//窗口实例扩展HINSTANCE hInstance;//实例句柄HICON hIcon;//窗口的最小化图标HCURSOR hCursor;//窗口鼠标光标HBRUSH hbrBackground;//窗口背景色LPCTSTR lpszMenuName;//窗口菜单LPCTSTR lpszClassName;// 窗口类名} WNDCLASS, *LPWNDCLASS;

HINSTANCE
程序使用HINSTANCE来区别task。
Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。
HMODULE 是代表应用程序载入的模块,win32系统下通常是被载入模块的线性地址。
HINSTANCE 在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16。
HWND 是窗口句柄。
GetModuleHandle
GetModuleHandle是获取一个应用程序或动态链接库的模块句柄。
HMODULEGetModuleHandle(LPCTSTRlpModuleName);
函数的作用是返回指定模块名的句柄,如果为NULL,则返回本模块的句柄。
返回的句柄值存放在寄存器eax中。
ZeroMemory
void ZeroMemory( PVOID Destination,SIZE_T Length );
Destination :指向一块准备用0来填充的内存区域的开始地址。
Length :准备用0来填充的内存区域的大小,按字节来计算

作用:

ZeroMemory只是将指定的内存块清零。
使用结构前清零,而不让结构的成员数值具有不确定性,是一个好的编程习惯。


原创粉丝点击