作者:愛攝影的新胖 | 来源:互联网 | 2023-09-07 18:16
具体代码在下面有贴出。具体工程下载:下载地址
安装代码:
void CInstallFontDemoDlg::OnBnClickedButton1()//安装字体
{CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Font File(*.ttf)|*.ttf; |Font File(*.otf)|*.otf; ||"), NULL);if (dlg.DoModal() !&#61; IDOK)return;CString strPath &#61; dlg.GetPathName();// 文件名int nIndex &#61; strPath.ReverseFind(&#39;\\&#39;);CString strFileName &#61; strPath.Right(strPath.GetLength() - nIndex - 1);// 字体名nIndex &#61; strFileName.ReverseFind(&#39;.&#39;);CString strFontName &#61; strFileName.Left(nIndex);// 系统字体路径TCHAR szWinDir[MAX_PATH] &#61; { NULL };GetWindowsDirectory(szWinDir, MAX_PATH);CString strSysFontPath(szWinDir);strSysFontPath &#43;&#61; _T("\\Fonts\\");CString strSysFontInstall &#61; strSysFontPath &#43; strFileName;// 拷贝字体到系统字体目录&#xff0c;操作需要程序具有管理员权限if (!CopyFile(strPath, strSysFontInstall, FALSE)){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("拷贝字体到系统字体目录失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 添加字体到系统字体库&#xff0c;操作需要程序具有管理员权限int _nFontNum &#61; AddFontResource(strSysFontInstall);if (_nFontNum <&#61; 0){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("添加字体到系统字体库失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 向注册表注册字体&#xff0c;操作需要程序具有管理员权限HKEY phkResult;DWORD dwRegResult &#61; 0;RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"),0, _T("REG_SZ"), 0, KEY_WRITE, 0, &phkResult, &dwRegResult);RegSetValueEx(phkResult, strFontName, 0, REG_SZ, (LPBYTE)strFileName.GetBuffer(), (_tcslen(strFileName) &#43; 1) * sizeof(TCHAR));RegCloseKey(phkResult);// 让安装的字体立刻生效 注意消息要发送两次//::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);//::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);AfxMessageBox(_T("安装字体成功!"));
}
卸载代码&#xff1a;
void CInstallFontDemoDlg::OnBnClickedButton2()//卸载字体
{CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Font File(*.ttf)|*.ttf; |Font File(*.otf)|*.otf; ||"), NULL);if (dlg.DoModal() !&#61; IDOK)return;CString strPath &#61; dlg.GetPathName();// 文件名int nIndex &#61; strPath.ReverseFind(&#39;\\&#39;);CString strFileName &#61; strPath.Right(strPath.GetLength() - nIndex - 1);// 字体名nIndex &#61; strFileName.ReverseFind(&#39;.&#39;);CString strFontName &#61; strFileName.Left(nIndex);// 系统字体路径TCHAR szWinDir[MAX_PATH] &#61; { NULL };GetWindowsDirectory(szWinDir, MAX_PATH);CString strSysFontPath(szWinDir);strSysFontPath &#43;&#61; _T("\\Fonts\\");CString strSysFontInstall &#61; strSysFontPath &#43; strFileName;// 从系统字体库删除字体&#xff0c;先移除再删除&#xff0c;操作需要程序具有管理员权限if (!RemoveFontResource(strSysFontInstall)){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("从系统字体库删除字体失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 删除系统字体&#xff0c;操作需要程序具有管理员权限if (!DeleteFile(strSysFontInstall)){int nErr &#61; GetLastError();CString strTip;strTip.Format(_T("删除系统字体失败! 错误码&#xff1a;%d"), nErr);AfxMessageBox(strTip);return;}// 向注册表删除字体&#xff0c;操作需要程序具有管理员权限HKEY phkResult;CString strKey &#61; _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts") ;LSTATUS st &#61; RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0, KEY_QUERY_VALUE | KEY_WRITE, &phkResult);if (st &#61;&#61; ERROR_SUCCESS){st &#61; RegDeleteValue(phkResult, strFontName);RegCloseKey(phkResult);AfxMessageBox(_T("卸载字体成功!"));}
}