WindowsAPI笔记
GetModuleHandleA
HMODULE GetModuleHandleA(
LPCSTR lpModuleName
);
1.如果参数为空,那么返回当前进程的句柄
注意:返回的句柄就是该进程在内存中的基址(ImageBase)
句柄->基址------牢记
2.如果指定了参数,不给扩展名(如:.exe,.dll),那么默认是dll文件
该函数就会在程序进程中查找与参数相同的模块字符串
找到了,就返回该模块的句柄
没找到,返回NULL
GetModuleFileNameA
DWORD GetModuleFileNameA(
HMODULE hModule,
LPSTR lpFilename,
DWORD nSize
);
1.如果参数hModule为空,那么返回当前可执行文件的绝对路径字符串的长度,缓冲区lpFilename会存放该路径字符串,nSize表示最多保存多大的字符串(防止溢出)
2.如果指定了hModule,返回指定的模块的路径字符串的长度,缓冲区lpFilename中会存放该路径字符串,注意,这里指定的模块必须是已经加载到该进程之中的模块
WideCharToMultiByte
将字符串(宽字节字符串,也就是unicode字符串)映射到一个新的字符串(多字节字符串,可以是ANSI字符串)
宽字节字符串:每个字符2个字节
多字节字符串:每个字符可以是1个字节(1个字节就是ANSI),也可以是2个字节
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
_In_NLS_string_(cchWideChar)LPCWCH lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCCH lpDefaultChar,
LPBOOL lpUsedDefaultChar
)
参数:
CodePage
用于执行转换的代码页。可以将此参数设置为操作系统中已安装或可用的任何代码页的值。
如:CP_A