获取系统已安装字体?

alexander_david alexander_david 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
去年做的东西,需要获取系统当期已经安装的字体名称,通过查询注册表实现,程序运行正常。但是今天测试莫名其妙不行了。程序已经用管理员身份执行,注册表可以打开,但是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;
}

郁闷阿,请大侠出手。
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
alexander_david
VC/MFC 16,550 成员 421,606 内容