常用"API"函数——(获得DLL句柄、路径)(窗口位置、句柄、指针相关函数)等
- 四、设置获得环境变量
- 三、获得当前工作路径
- 二、获得ModuleHandle、获得资源句柄、应用程序名字等
- (一)Win API函数LoadLibrary和LoadLibraryEx
- (一)Win API函数GetModuleHandleA和GetModuleHandleExA
- (二)Win API函数GetModuleFileNameA
- (三)Win API函数GetAppName
- (四)Win API函数GetResourceHandle
- (五)MFC函数AfxGetApp
- (六)MFC函数AfxGetAppName
- (七)MFC函数AfxGetInstanceHandle
- (八)MFC函数AfxGetMainWnd
- (九)MFC函数AfxGetThread
- (十)MFC函数AfxGetResourceHandle和AfxSetResourceHandle
- (十一)MFC函数AfxFindResourceHandle
- (十一)MFC函数AfxLoadLibrary和AfxLoadLibraryEx
- 一、窗口位置、句柄、指针相关函数
四、设置获得环境变量
(一)stdlib.h标准库
(1)char *getenv和 errno_t getenv_s
头文件: stdlib.h
用 法: char *getenv(char *envvar);
errno_t getenv_s(size_t * restrict len,char * restrict value,rsize_t valuesz,const char * restrict name);
参数 | 说明 |
---|---|
len | 指向用户提供的位置的指针,存储环境变量的长度 (返回的字符长度)。 |
value | 指向用户提供的字符数组的指针,存储环境变量的内容(返回的字符) |
valuesz | 允许getenv_s写入dest的最大字符数(缓冲区的大小)(注意:最大长度,低于最大长度返回NULL) |
name | 以空字符结尾的字符串标识要查找的环境变量的名称(例如”:PATH“、“TMP”、"LIB"等) |
用法实例
char *value; size_t len;
getenv_s(&len, NULL, 0, "PATH");
value= (char*)alloc(len* sizeof(char));
getenv_s(&len, value, len, "PATH");
(2)::GetEnvironmentStrings和::SetEnvironmentString
(3)putenv和putenv_s
(二)API函数—GetEnvironmentStrings
三、获得当前工作路径
(一)::GetCurrentDirectory()获得当前路径
wchar_t *path=new wchar_t[size];
if(GetCurrentDirectory(size,path)!=0)
{
wstr=path;
}
(二)char* getcwd(char* buffer, int len);
函数说明:
该函数所属头文件为<direct.h>
函数原型:char* getcwd(char* buffer, int len);
参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len是buffer的长度。
返回值:获取成功则返回当前工作目录(绝对路径),失败则返回false(即NULL)。
二、获得ModuleHandle、获得资源句柄、应用程序名字等
(一)Win API函数LoadLibrary和LoadLibraryEx
LoadLibraryEx函数与LoadLibrary函数非常相似 。不同之处在于LoadLibraryEx提供的一组可选行为:
1、LoadLibraryEx可以在不调用 DLL 的DllMain函数的情况下加载 DLL 模块。
2、LoadLibraryEx可以以一种针对模块永远不会执行的情况进行优化的方式加载模块,就像加载数据文件一样加载模块。
3、LoadLibraryEx可以使用两种搜索策略中的任何一种来查找模块及其关联的模块,也可以搜索特定于进程的目录集。
(一)Win API函数GetModuleHandleA和GetModuleHandleExA
1、GetModuleHandleA—检索指定模块的模块句柄。该模块必须已由调用进程加载。
HMODULE GetModuleHandleExA(
[in, optional] LPCSTR lpModuleName
);
参数
[in, optional] lpModuleName
已加载模块的名称(.dll 或 .exe 文件)。如果省略文件扩展名,则附加默认库扩展名 .dll。文件名字符串可以包含一个尾随点字符 (.) 以指示模块名称没有扩展名。该字符串不必指定路径。指定路径时,请务必使用反斜杠 (),而不是正斜杠 (/)。该名称与当前映射到调用进程地址空间的模块名称进行比较(大小写无关)。
如果此参数为 NULL, GetModuleHandle返回用于创建调用进程的文件(.exe 文件)的句柄。
GetModuleHandle函数不检索使用LOAD_LIBRARY_AS_DATAFILE标志加载的模块的句柄。
2、GetModuleHandleExA——检索指定模块的模块句柄并增加模块的引用计数,除非指定了 GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT。该模块必须已由调用进程加载。
BOOL GetModuleHandleExA(
[in] DWORD dwFlags,
[in, optional] LPCSTR lpModuleName,
[out] HMODULE *phModule
);
(二)Win API函数GetModuleFileNameA
检索包含指定模块的文件的完全限定路径。该模块必须已由当前进程加载。
要查找由另一个进程加载的模块的文件,请使用 GetModuleFileNameEx函数。
DWORD GetModuleFileNameA(
[in, optional] HMODULE hModule,
[out] LPSTR lpFilename,
[in] DWORD nSize
);
(三)Win API函数GetAppName
检索正在使用该文件的应用程序的名称
HRESULT GetAppName(
[out] LPWSTR *ppszName
);
参数
[out] ppszName
类型:LPWSTR*
指向缓冲区的指针的地址,当此方法成功返回时,将接收应用程序名称。
(四)Win API函数GetResourceHandle
(五)MFC函数AfxGetApp
获取指向 对象的 CWinApp 指针
CWinApp* AFXAPI AfxGetApp();
(六)MFC函数AfxGetAppName
LPCTSTR AFXAPI AfxGetAppName();
(七)MFC函数AfxGetInstanceHandle
此函数使您能够检索当前应用程序的实例句柄。
HINSTANCE AFXAPI AfxGetInstanceHandle();
(八)MFC函数AfxGetMainWnd
如果应用程序是 OLE 服务器,请调用此函数以检索指向应用程序的活动主窗口的指针。 使用此结果,而不是直接引用 m_pMainWnd 应用程序对象的成员。
CWnd* AFXAPI AfxGetMainWnd();
(九)MFC函数AfxGetThread
调用此函数以获取指向表示当前正在执行的线程的对象的指针 CWinThread
CWinThread* AfxGetThread();
(十)MFC函数AfxGetResourceHandle和AfxSetResourceHandle
1、HINSTANCE使用此函数返回的句柄直接访问应用程序的资源,例如,在调用 Windows 函数FindResource时。
extern HINSTANCE AfxGetResourceHandle();
2、使用此函数设置 HINSTANCE 确定加载应用程序的默认资源的句柄。
void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);
(十一)MFC函数AfxFindResourceHandle
使用 AfxFindResourceHandle 处理资源链并按资源 ID 和资源类型找到特定资源。
HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName, LPCTSTR lpszType );
(十一)MFC函数AfxLoadLibrary和AfxLoadLibraryEx
如果应用程序使用多个线程,并且如果它动态加载 MFC 扩展 DLL,请确保使用 AfxLoadLibrary 并 AfxFreeLibrary (而不是 Win32 函数 LoadLibrary 和 FreeLibrary) 。 使用 AfxLoadLibrary 和 AfxFreeLibrary 确保加载和卸载 MFC 扩展 DLL 时执行的启动和关闭代码不会损坏全局 MFC 状态。
一、窗口位置、句柄、指针相关函数
(一)、GetWindowRect()、GetClientRect()
1、API函数
CRect RC;
::GetWindowRect(hWnd,&RC);
::GetClientRect(hWnt,&RC);
2、MFC窗口函数
CDialog* dlg;
dlg->GetWindowRect(&RC)
dlg->GetClientRect(&RC);
(二)、ScreenToClient()、ClientToSreen()
1、API函数
2、MFC函数
CWnd::ScreenToClient
(三)、SetWindowPos()、MoveWindow()
1、API函数
::SetWindowPos()
2、MFC函数
CWnd::SetWindowPos()
(四)、GetDlgItem()、GetSafeHwnd()、GetWindow()、GetParent()、FromHandle()
1、MFC函数:: GetDlgItem()、GetSafeHwnd()
CWnd*pWnd=GetDlgItem(IDD_); //获取当前窗口控件指针 MFC函数
HWND hwnd=pWnd->GetSafeHwnd();//获得当前控件的句柄
CWnd* GetWindow(UINT nCmd) const; //返回当前窗口指定关系的窗口
2、API函数
HWND GetWindow( //返回指定窗口指定关系的窗口
[in] HWND hWnd,
[in] UINT uCmd
);
HWND GetParent(HWND hWnd);
//函数功能:该函数返回一个指定子窗口的父窗口句柄
//函数原型:HWND GetParent(HWND hWnd);
//参数:
//hWnd:子窗口句柄,函数要获得该子窗口的父窗口句柄。
//返回值:
//如果函数成功,返回值为父窗口句柄。如果窗口无父窗口,则函数返回NULL。若想获得更多错误信息,请调用GetLastError函数。