C++ 应用程序问题的解析图标
我想从注册表中获取应用程序图标。问题是我只得到默认的应用程序图标。如何获得实际的应用程序图标?谢谢 屏幕截图:C++ 应用程序问题的解析图标,c++,qt,registry,windows-applications,C++,Qt,Registry,Windows Applications,我想从注册表中获取应用程序图标。问题是我只得到默认的应用程序图标。如何获得实际的应用程序图标?谢谢 屏幕截图: QStringList allLocalMachineX86Keys; QString displayIcon; QString iconFile; QIcon programIcon; QStringList displayIconSplitted; QString iconSplittedData; QFileIconProvider fileIconProvider; QStri
QStringList allLocalMachineX86Keys;
QString displayIcon;
QString iconFile;
QIcon programIcon;
QStringList displayIconSplitted;
QString iconSplittedData;
QFileIconProvider fileIconProvider;
QString displayName;
QSettings registryKeyLocalMachineX86("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);
allLocalMachineX86Keys = registryKeyLocalMachineX86.allKeys();
for (QString key : allLocalMachineX86Keys) {
if (!key.isEmpty()) {
if (key.contains("DisplayIcon")) {
displayIcon = registryKeyLocalMachineX86.value(key).toString();
if (displayIcon.contains("\"")) {
displayIconSplitted = displayIcon.split("\"");
iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
iconFile = iconSplittedData;
} else if (displayIcon.contains(",")) {
displayIconSplitted = displayIcon.split(",");
iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
iconFile = iconSplittedData;
} else {
iconFile = displayIcon;
}
if (iconFile.contains(".ico")) {
programIcon = QIcon(iconFile);
} else {
QFileInfo fileInfo(iconFile);
programIcon = fileIconProvider.icon(fileInfo);
}
} else {
programIcon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
}
if (key.contains("DisplayName") && registryKeyLocalMachineX86.value(key).toString() != "") {
displayName = registryKeyLocalMachineX86.value(key).toString();
emit appData(programIcon, displayName);
}
}
}
代码:
QStringList allLocalMachineX86Keys;
QString displayIcon;
QString iconFile;
QIcon programIcon;
QStringList displayIconSplitted;
QString iconSplittedData;
QFileIconProvider fileIconProvider;
QString displayName;
QSettings registryKeyLocalMachineX86("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);
allLocalMachineX86Keys = registryKeyLocalMachineX86.allKeys();
for (QString key : allLocalMachineX86Keys) {
if (!key.isEmpty()) {
if (key.contains("DisplayIcon")) {
displayIcon = registryKeyLocalMachineX86.value(key).toString();
if (displayIcon.contains("\"")) {
displayIconSplitted = displayIcon.split("\"");
iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
iconFile = iconSplittedData;
} else if (displayIcon.contains(",")) {
displayIconSplitted = displayIcon.split(",");
iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
iconFile = iconSplittedData;
} else {
iconFile = displayIcon;
}
if (iconFile.contains(".ico")) {
programIcon = QIcon(iconFile);
} else {
QFileInfo fileInfo(iconFile);
programIcon = fileIconProvider.icon(fileInfo);
}
} else {
programIcon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
}
if (key.contains("DisplayName") && registryKeyLocalMachineX86.value(key).toString() != "") {
displayName = registryKeyLocalMachineX86.value(key).toString();
emit appData(programIcon, displayName);
}
}
}
更新:
当我对这些代码行进行注释时:
// } else {
// programIcon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
// }
应用程序图标会显示,但有些是空的或不是来自应用程序(下图):
有人知道怎么修吗?提前谢谢