1. GetModuleFileName的用法
参数说明:
DWORD GetModuleFileName(
HMODULE hModule, // handle to module 模块的句柄 如果为空则表示当前的exe的句柄
LPTSTR lpFilename, // path buffer 返回模块所在的位置地址
DWORD nSize // size of buffer 数据长度
);
用例:返回当前软件的路径
TCHAR szModulePath[MAX_PATH] = {0};
ZeroMemory(szModulePath, MAX_PATH * sizeof(TCHAR));
::GetModuleFileName(NULL, szModulePath, MAX_PATH);
2. CString的字符串的一些操作 ReverseFind, Right, Left用法
用例:取某个exe的名字 并且 取得exe的上级目录
CString strExePath = L"E:\\NewUi\\D_C\\Dolphin.exe";
int nPos = strExePath.ReverseFind(_T('\\')); //找到最后一个\\所在的位置
CString strAppName = strExePath.Right(m_stAppConfig.strAppPath.GetLength() - nPos - 1); //得到EXE的名字Dolphin.exe
CString strAppPath = strExePath.Left(nPos + 1); //到软件的包含的目录结构 E:\\NewUi\\D_C\\
3. SHGetFolderPath 使用这个函数获取 系统定制的一些文件夹路径
用例:获取路径:C:\Users\Administrator\AppData\Local
TCHAR szLocalPath[MAX_PATH] = {0};
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, szLocalPath);
这样就获取到了路径 指定位置的路径 详细的参数见MSDN 关键字 SHGetFolderPath
4. 创建文件夹的操作
直接使用 CreateDirectory 来创建文件夹 用法比较简单
用法:
::CreateDirectory(L"C:\\Test", NULL); //创建了一个名为Test的文件夹
5. 删除某个文件的操作
直接使用 DeleteFile即可删除指定的文件
用法:
::DeleteFile(L"C:\\Test", NULL);
6. 配置文件的相关操作
关键函数GetPrivateProfileString:根据键获取对应的值 类似于map键值对操作
*读配置文件的操作:
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // 节点名
LPCTSTR lpKeyName, // 键的名字
LPCTSTR lpDefault, // 如果键的名字不生效 则用此参数替换键值 进行搜索
LPTSTR lpReturnedString, // 返回的内容 (根据键值得到的内容)
DWORD nSize, // 路径的一个大小 默认设置为 MAX_PATH
LPCTSTR lpFileName // 配置文件的路径
);
例子:
[Login]
ServerAddr=192.168.0.1
CString szValue= L""; //返回值
::GetPrivateProfileString(_T("Login"), _T("ServerAddr"), _T(""), szValue, MAX_PATH, 配置文件的路径);
得到 szValue = L"192.168.0.1";
*写配置文件的操作
WritePrivateProfileString
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // 节点名
LPCTSTR lpKeyName, // 键的名字
LPCTSTR lpString, // 添加键对应的字符串
LPCTSTR lpFileName // 配置文件的路径
);
增加配置的键值对
[Login]
ServerAddr=Test
::WritePrivateProfileString(_T("Login"), _T("ServerAddr"), _T("Test"), 配置文件的路径);
7. 字符串比较函数 Compare 和 CompareNoCase 的区别
明显的区别就是 CompareNoCase 是忽略大小写的比较方式
8. 枚举系统字体
std::vector<CString> vctFontName;
::EnumFontFamilies(::GetDC(NULL), (LPTSTR) NULL, (FONTENUMPROC)FontNameEnumProc, (LPARAM)(&vctFontName));
INT xxxxDialog::FontNameEnumProc(LOGFONT *plf, TEXTMETRIC* ptm, INT nFontType, LPARAM lParam)
{
std::vector<CString> *pVector = (std::vector<CString>*)lParam;
pVector->push_back(plf->lfFaceName);
return TRUE;
}
9. 注册表的相关操作
RegOpenKeyEx:打开指定的注册表项;
函数原型:
LONG RegOpenKeyEx(
HKEY hKey, // 打开指定的注册表键
LPCTSTR lpSubKey, // 注册表子项
DWORD ulOptions, // 保留字段 必须设置为0
REGSAM samDesired, // 安全访问掩码 可以简单理解为 操作类型
PHKEY phkResult // 接收打开键的句柄 使用RegCloseKey关闭
);
例子打开对应的键的目录
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer
HKEY hKey = NULL;
LSTATUS ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Internet Explorer"), 0, KEY_READ, &hKey);
RegQueryValueEx 根据得到的目录 拿到指定键对应的值
函数原型:
LONG RegQueryValueEx(
HKEY hKey, // 键值的句柄
LPCTSTR lpValueName, // 查询值的名称
LPDWORD lpReserved, // 预留字段 必须设置为NULL
LPDWORD lpType, // 类型代码,如果不需要类型代码 可设置为NULL
LPBYTE lpData, // 数据缓冲区 接收数据
LPDWORD lpcbData // 数据缓冲区的大小
);
例子:
DWORD dwSize = 64;
TCHAR szVersion[64] = {0};
ret = RegQueryValueEx(hKey, _T("svcVersion"), 0, NULL, (LPBYTE)szVersion, &dwSize);
返回值 存储在 svcVersion中
修改指定目录下的某个键的值
RegSetValueEx:修改某个键的值 或者 增加新的键值对
函数原型:
LONG RegSetValueEx(
HKEY hKey, // 指定键的句柄 可以理解为目录的句柄
LPCTSTR lpValueName, // 修改或者增加的键名称(如果列表中没有相同的则增加此键值)
DWORD Reserved, // 保留字段,必须设置为0
DWORD dwType, // 设置值的类型
CONST BYTE *lpData, // 设定的值的数据缓冲区
DWORD cbData // 缓冲区的大小
);
用完之后一定要 RegCloseKey(xxxKey);