MFC用代码安装卸载矢量字体

具体代码在下面有贴出。具体工程下载:下载地址

安装代码:

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() != IDOK)
		return;

	CString strPath = dlg.GetPathName();

	// 文件名
	int nIndex = strPath.ReverseFind('\\');
	CString strFileName = strPath.Right(strPath.GetLength() - nIndex - 1);

	// 字体名
	nIndex = strFileName.ReverseFind('.');
	CString strFontName = strFileName.Left(nIndex);

	// 系统字体路径
	TCHAR szWinDir[MAX_PATH] = { NULL };
	GetWindowsDirectory(szWinDir, MAX_PATH);
	CString strSysFontPath(szWinDir);
	strSysFontPath += _T("\\Fonts\\");
	CString strSysFontInstall = strSysFontPath + strFileName;

	// 拷贝字体到系统字体目录,操作需要程序具有管理员权限
	if (!CopyFile(strPath, strSysFontInstall, FALSE))
	{
		int nErr = GetLastError();
		CString strTip;
		strTip.Format(_T("拷贝字体到系统字体目录失败! 错误码:%d"), nErr);
		AfxMessageBox(strTip);
		return;
	}
	// 添加字体到系统字体库,操作需要程序具有管理员权限
	int _nFontNum = AddFontResource(strSysFontInstall);
	if (_nFontNum <= 0)
	{
		int nErr = GetLastError();
		CString strTip;
		strTip.Format(_T("添加字体到系统字体库失败! 错误码:%d"), nErr);
		AfxMessageBox(strTip);
		return;
	}

	// 向注册表注册字体,操作需要程序具有管理员权限
	HKEY phkResult;
	DWORD dwRegResult = 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) + 1) * sizeof(TCHAR));
	RegCloseKey(phkResult);

	// 让安装的字体立刻生效 注意消息要发送两次
	//::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
	//::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
	AfxMessageBox(_T("安装字体成功!"));
}

卸载代码:

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() != IDOK)
		return;

	CString strPath = dlg.GetPathName();

	// 文件名
	int nIndex = strPath.ReverseFind('\\');
	CString strFileName = strPath.Right(strPath.GetLength() - nIndex - 1);

	// 字体名
	nIndex = strFileName.ReverseFind('.');
	CString strFontName = strFileName.Left(nIndex);

	// 系统字体路径
	TCHAR szWinDir[MAX_PATH] = { NULL };
	GetWindowsDirectory(szWinDir, MAX_PATH);
	CString strSysFontPath(szWinDir);
	strSysFontPath += _T("\\Fonts\\");
	CString strSysFontInstall = strSysFontPath + strFileName;
	
 
 	// 从系统字体库删除字体,先移除再删除,操作需要程序具有管理员权限
 	if (!RemoveFontResource(strSysFontInstall))
 	{
 		int nErr = GetLastError();
 		CString strTip;
 		strTip.Format(_T("从系统字体库删除字体失败! 错误码:%d"), nErr);
 		AfxMessageBox(strTip);
 		return;
 	}

	// 删除系统字体,操作需要程序具有管理员权限
	if (!DeleteFile(strSysFontInstall))
	{
		int nErr = GetLastError();
		CString strTip;
		strTip.Format(_T("删除系统字体失败! 错误码:%d"), nErr);
		AfxMessageBox(strTip);
		return;
	}

	// 向注册表删除字体,操作需要程序具有管理员权限
	HKEY phkResult;
	CString strKey = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts") ;
	LSTATUS st = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0, KEY_QUERY_VALUE | KEY_WRITE, &phkResult);

	if (st == ERROR_SUCCESS)
	{
		st = RegDeleteValue(phkResult, strFontName);
		RegCloseKey(phkResult);
		AfxMessageBox(_T("卸载字体成功!"));
	}
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值