获取系统已安装字体?
去年做的东西,需要获取系统当期已经安装的字体名称,通过查询注册表实现,程序运行正常。但是今天测试莫名其妙不行了。程序已经用管理员身份执行,注册表可以打开,但是RegEnumValue()返回失败,并且返回值每次都不一样:
郁闷阿,请大侠出手。
LONG Ctest::GetNextNameValue(HKEY key, LPCTSTR subkey, LPTSTR szName, LPTSTR szData)
{
HKEY hkey = NULL;
DWORD dwIndex = 0;
LONG retval;
if (subkey == NULL && szName == NULL && szData == NULL)
{
if (hkey)
RegCloseKey(hkey);
hkey = NULL;
return ERROR_SUCCESS;
}
if (subkey && subkey[0] != 0)
{
retval = RegOpenKeyEx(key, subkey, 0, KEY_ALL_ACCESS, &hkey);
if (retval != ERROR_SUCCESS)
{
//TRACE(_T("RegOpenKeyEx failed\n"));
MessageBox(NULL, _T("RegOpenKeyEx failed!"), NULL, 0);
return retval;
}
else
{
MessageBox(NULL, _T("RegOpenKeyEx succeed!"), NULL, 0);
}
dwIndex = 0;
}
else
{
dwIndex++;
}
ASSERT(szName != NULL && szData != NULL);
*szName = 0;
*szData = 0;
TCHAR szValueName[MAX_PATH];
DWORD dwValueNameSize = sizeof(szValueName)-1;
TCHAR szValueData[MAX_PATH];
DWORD dwValueDataSize = sizeof(szValueData)-1;
DWORD dwType = 0;
memset(szValueName, 0, sizeof(szValueName));
memset(szValueData, 0, sizeof(szValueData));
retval = RegEnumValue(hkey, dwIndex, szValueName, &dwValueNameSize, NULL,
&dwType, (LPBYTE)szValueData, &dwValueDataSize);
if (retval == ERROR_SUCCESS)
{
lstrcpy(szName, szValueName);
lstrcpy(szData, szValueData);
}
else
{
CString str;
str.Format(_T("RegEnumValue failed! return value = 0x%x", retval));
MessageBox(NULL, str, NULL, 0);
}
return retval;
}
郁闷阿,请大侠出手。
...全文
相关推荐
centos7 离线安装字体fontconfig
centos7 离线安装字体fontconfig ,在无网情况下,我们要解决linux字体问题,可以参考此方法。举一反三
C#获取系统已安装字体的完整实现方法
在现代软件开发中,字体不仅是用户界面美观的重要组成部分,更是实现跨平台文本渲染、国际化支持和自定义绘图功能的关键资源。C#作为.NET平台的核心语言之一,在图形界面开发和后端服务中广泛涉及字体的调用与管理。然而,许多开发者对“系统已安装字体”的获取机制缺乏深入理解,往往依赖硬编码或静态列表,导致应用在不同操作系统环境下出现字体缺失、显示异常等问题。本章将从C#字体管理的基本概念出发,阐述程序如何通过.NET框架与操作系统底层字体资源进行安全、高效的交互。
字体安装方法
字体安装方法,可以解决无法读取文件或者软件的问题,非常实用
Windows安装字体与删除字体.docx
Windows安装字体与删除字体.docx
字体添加文档
自己做的,在linux下添加了一些新的字体(宋体,仿宋体,隶体等),分享一下


