C
Cobra9115130 мая 2017 г. 16:09

Проблема с получением данных об установленных программах

с++, qt, windows-application

Здравствуйте! Я хочу получить данные программ через реестр, проблема в том что у меня находит 900 записей, а если проверить через Панель Управления (Установка и удаление программ) то только 213. Я пробовал получать данные через

QSettings
и также через Win API. Я хочу записать эти данные в
QTreeWidgetItem (QTreeWidget)
Вывести нужно списком - иконку/название/версию/разработчика/путь установки и удаления программ Код Qt
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));
// }
Скриншот: Спасибо заранее.

2017-05-29_232847.png
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

33
Evgenii Legotckoi
  • 31 мая 2017 г. 2:37

Полагаю, что Вы получаете список всех программ, которые когда либо существовали на вашем ПК, но в данный момент часть из них удалена. Могу предложить проверять наличие существующих путей установки и удаления, то есть переменные Install Path и Uninstall Path, чтобы отсеять несуществующее ПО. То есть не учитывать то ПО, у которого, например, не найден деинсталлятор по заданном пути. То есть считать, что программа не установлена. Кстати, Установка и Удаление программ тоже иногда содержит несуществующее ПО, если не совсем корректно была произведена деинсталляция. Ну и допустим отсеивать дублирующиеся записи.

Сами же знаете, что реестр со временем превращается в помойку. Тогда возможно и с иконками будет проще работать, если будете предварительно отсеивать несуществующее ПО.

    C
    • 31 мая 2017 г. 4:40

    Да, но как отсеивать эти данные по (Uninstall Path), так как сейчас идет через:

    if (key.contains("DisplayName") && registryKeyLocalMachineX86.value(key).toString() != "") {
                displayName = registryKeyLocalMachineX86.value(key).toString();
                emit appData(programIcon, displayName);
            }
    И оно записывает название программы, можно сделать через QStringList все записи в массив и тогда циклом сортировать по Uninstall Path, только не будет сходится по Install Path и будет сбой программы или не соотвествовать Install Path к программе, так как Install Path не у всех программ есть, но эти программы определяются в Панели Управления. Вот к примеру данные с "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" записывает хорошо, только проблема с "HKEY_LOCAL_MACHINE" и "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node". Есть вариант сделать проверку по Install Path и Uninstall Path но тогда часть установленных программ будет отсеяна.

      Evgenii Legotckoi
      • 31 мая 2017 г. 5:13

      Я имел ввиду, использовать QFile или QDir, чтобы проверить, а есть ли этот деинсталлятор по заданном пути. К тому же, HKEY_CURRENT_USER - это программы текущего пользователя, а HKEY_LOCAL_MACHINE - это программы всего ПК. Здесь уже вопрос к правам и администрированию. Может быть, что всё верно, что правильно показывает такое большое количество записей, поскольку в панели управления может отображаться лишь то, что доступно пользователю.

      Помимо прочего, в установке и удалении программ отображаются лишь программы с зарегистрированным в реестре деинсталлятором. А если деинсталлятор в реестре не зарегистрирован, то и информации там не будет. Поэтому Install Path здесь роли не играет. То есть Вы не сможете всё равно получить полный список всех установленных программ, если в реестре нет записи об их деинсталляторе.

      У QFile Есть статический метод exists . Можете использовать его для проверки существования деинсталлятора. Вам сейчас нужно определить чёткие критерии, какого результата хотите добиться в рамках реестра Windows. Я пока не вижу чего-то более чёткого, чем просто необходимость забрать все программы. Вы пытаетесь получить такой же результат как в Установки и Удаления программ ?

      Что касается сортировки и QStringList, то этого всего лишь проблема подхода с заполнением таблиц, не более того. Можно же использовать и специально написанный класс для хранения данных о записи реестра, которая будет содержать Install Path, DisplayName и т.д. Это может быть даже обычная структура. Просто исключать или добавлять эту структуру в QVector с записями и использовать требуемую Вам обработку.

        C
        • 31 мая 2017 г. 6:06

        Да, я хочу получить почти такой результат как в Установки и Удаления программ. Задачи: 1. Вывести такое количество данных как в Установки и Удаления программ 2. Вывести нужно списком - иконку/название/версию/разработчика/путь установки и удаления программ А зачем проверять путь деинсталлятора через QFile::exists если нужно только список вывести без функционала удаления? Я переписал код на QStringList. Вот количество всех данных со всех веток реестра - HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE/HKEY_LOCAL_MACHINE (x64) Icons: 170 Names: 914 Versions: 904 Publishers: 906 Install Locations: 848 Uninstall Locations: 875 Код:

        void Test::setAppData(QList<QIcon> icons, QStringList names, QStringList versions, QStringList publishers, QStringList installLocations, QStringList uninstallLocations)
        {
            qDebug() << "Icons: " << icons.count();
            qDebug() << "Names: " << names.count();
            qDebug() << "Versions: " << versions.count();
            qDebug() << "Publishers: " << publishers.count();
            qDebug() << "Install Locations: " << installLocations.count();
            qDebug() << "Uninstall Locations: " << uninstallLocations.count();
        
            //int i = 0;
            for (QString uninstallLocation : uninstallLocations) {
                //i++;
                //qDebug() << uninstallLocation << " :" << i;
                allApplicationsItem = new QTreeWidgetItem(allApplications);
                allApplicationsItem->setText(0, uninstallLocation);
            }
        }
        
        Теперь нужно отсортировать относительно Uninstall Locations остальные данные.
          C
          • 31 мая 2017 г. 6:08

          Вот скриншот с программы. Еще нужно вывести иконку с названием, версию, разработчика и путь установки.

            C
            • 31 мая 2017 г. 9:46

            Изменил код на:

            void Test::setAppData(QList<QIcon> icons, QStringList names, QStringList versions, QStringList publishers, QStringList installLocations, QStringList uninstallLocations)
            {
                for (int i = 0; i < uninstallLocations.count(); i++) {
                    allApplicationsItem = new QTreeWidgetItem(allApplications);
                    allApplicationsItem->setText(0, names.at(i));
                    //allApplicationsItem->setText(1, versions.at(i));
                    //allApplicationsItem->setText(2, publishers.at(i));
                    //allApplicationsItem->setText(3, installLocations.at(i));
                    allApplicationsItem->setText(4, uninstallLocations.at(i));
                }
            }
            Но название программы не соответствует installLocations (Uninstall Path). Попробую сделать через структуру. А что за специально написанный класс для хранения данных о записи реестра, вы писали? Спасибо.
              C
              • 31 мая 2017 г. 11:23

              Еще вот такой вопрос: создал структуру

              struct AppsData { 
                  QList icons; 
                  QStringList name; 
                  QStringList version; 
                  QStringList publisher; 
                  QStringList installLocation; 
                  QStringList uninstallLocation; 
              };
               и создал обьект класса QVector со структурой QVector dataVector; У меня получает данные с класса Worker и передает эти данные программ через поток в Test класс (главное окно) как QList и остальное как QStringList. А теперь эти данные записать в dataVector или нужно когда emit (передаю данные) уже в dataVector записать и тогда передавать уже?

                C
                • 31 мая 2017 г. 16:30

                Я изменил код на тот что был ранее, все данные выводятся правильно, только проблема с иконками програм. Думаю что структура и вектор здесь только усложнят задачу, а нужно решать вопрос с иконками программ. Вывожу данные так:

                void Test::setAppData(QIcon icon, QString name)
                {
                    allApplicationsItem = new QTreeWidgetItem(allApplications);
                    allApplicationsItem->setIcon(0, icon);
                    allApplicationsItem->setText(0, name);
                }
                
                void Test::setAppVersion(QString version)
                {
                    allApplicationsItem->setText(1, version);
                }
                
                void Test::setAppPublisher(QString publisher)
                {
                    allApplicationsItem->setText(2, publisher);
                }
                
                void Test::setAppInstallLocation(QString installLocation)
                {
                    allApplicationsItem->setText(3, installLocation);
                }
                
                void Test::setAppUninstallLocation(QString uninstallLocation)
                {
                    allApplicationsItem->setText(4, uninstallLocation);
                }
                  Evgenii Legotckoi
                  • 1 июня 2017 г. 2:31

                  Структуру реализовали не правильно. Нужно было так сделать:

                  struct AppsData { 
                      QIcon icons; 
                      QString name; 
                      QString version; 
                      QString publisher; 
                      QString installLocation; 
                      QString uninstallLocation; 
                  };

                  И уже этой структурой оперировать в QVector

                  QVector<AppsData> vectorData;

                  Тогда всё станет гораздо проще

                    C
                    • 1 июня 2017 г. 2:46

                    Хорошо. Значит теперь нужно

                    QIcon programIcon, QString displayName
                    и т.д записать в эту структуру к примеру
                    AppsData appsData; appsData.icon = programIcon
                    и т.д, тогда записать структуру в
                    QVector vectorData.push_back(appsData);
                    и передать данные
                    emit appsData(vectorData)
                    с класса
                    Worker
                    Test (главное окно).
                      Evgenii Legotckoi
                      • 1 июня 2017 г. 2:52

                      Да. Совершенно верно, тогда вы будете оперировать объектом, который содержит полную информацию об одной строке. Тогда можно будет делать сортировку и прочие действия на этими объектами, не беспокоясь, что потеряете один из параметров.

                        C
                        • 1 июня 2017 г. 2:58

                        Хорошо. Спасибо. Сейчас буду пробовать, позже напишу.

                          C
                          • 1 июня 2017 г. 3:13

                          Теперь проблема с сигналами и слотами, сначала писало что структура не ининциализирована, так как при передаче данные оно хочет видеть

                          appData(QVector data)
                          (это в signals и позже slots), тогда я создал в каждом (Worker и Test) эту структуру в заголовочном файле (Worker.h/Test.h). Но теперь пишет вот:
                           error: C2338: Signal and slot arguments are not compatible.
                           see reference to function template instantiation 'QMetaObject::Connection QObject::connect<void(__cdecl Worker::* )(QVector<Worker::AppsData>),void(__cdecl PCInfo::* )(QVector<PCInfo::AppsData>)>(const Worker *,Func1,const PCInfo *,Func2,Qt::ConnectionType)' being compiled
                          with
                          [
                              Func1=void (__cdecl Worker::* )(QVector<Worker::AppsData>),
                              Func2=void (__cdecl PCInfo::* )(QVector<Test::AppsData>)
                          ]
                          Как это исправить?
                            C
                            • 1 июня 2017 г. 3:15
                            Точнее вот эта ошибка:
                            error: C2338: Signal and slot arguments are not compatible.
                             see reference to function template instantiation 'QMetaObject::Connection QObject::connect<void(__cdecl Worker::* )(QVector<Worker::AppsData>),void(__cdecl PCInfo::* )(QVector<PCInfo::AppsData>)>(const Worker *,Func1,const PCInfo *,Func2,Qt::ConnectionType)' being compiled
                            with
                            [
                                Func1=void (__cdecl Worker::* )(QVector<Worker::AppsData>),
                                Func2=void (__cdecl Test::* )(QVector<Test::AppsData>)
                            ]
                              C
                              • 1 июня 2017 г. 3:22

                              Как тогда передать сигнал вектора со структурой?

                                C
                                • 1 июня 2017 г. 4:11

                                Уже решил проблему с сигналами и слотами. Нужно было инициализировать эту структуру в глобальном классе чтобы она была видна и в Worker и Test.

                                  C
                                  • 1 июня 2017 г. 4:26

                                  Почти все. Последний вопрос, как записать эти все данные в

                                  QTreeWidgetItem
                                  в соответствующую колонку?
                                  void Test::setAppData(QVector data)
                                  {
                                      QVectorIterator i(data);
                                  
                                      while (i.hasNext()) {
                                          allApplicationsItem = new QTreeWidgetItem(allApplications);
                                          allApplicationsItem->setText(0, i.next());
                                      }
                                  }
                                  
                                  Такой код не работает.
                                    C
                                    • 1 июня 2017 г. 4:30

                                    На вашем сайте не верно форматирует код, должно быть: void Test::setAppData(QVector data)

                                      C
                                      • 1 июня 2017 г. 5:34

                                      Теперь знаю как выводить данные структуры через вектор:

                                      void Test::setAppData(QVector data)
                                      {
                                          qDebug() << data.data()->name;
                                      }
                                      
                                      Данный код выводит только 1 значение: "HHD Software Free Hex Editor Neo 6.24".
                                        C
                                        • 1 июня 2017 г. 5:56
                                        qDebug() << vectorData.count();
                                        Возвращает только 1 значение, значит я что-то неправильно записываю в структуру.
                                          C
                                          • 1 июня 2017 г. 7:42

                                          Здесь что-то не так, цыкл записывает только последнее значение, а нужно все, если сделать через

                                          QString::append()
                                          тогда будет 1 значение со всеми записями. Мне нужно использовать QStringList все-же?
                                            C
                                            • 1 июня 2017 г. 8:20

                                            Я установил

                                            dataVector.push_back(appsData);
                                            в цикл, теперь выводит много одинаковых значений.

                                              C
                                              • 1 июня 2017 г. 9:05

                                              Я уже сделал так как вы советовали.

                                              if (key.contains("UninstallString") && registryKeyLocalMachineX64.value(key).toString() != "" && !key.contains("QuietUninstallString")) {
                                                    uninstallLocation = registryKeyLocalMachineX64.value(key).toString();
                                                    appsData.uninstallLocation = uninstallLocation;
                                                   dataVector.push_back(appsData);
                                              }
                                              Теперь работает через QVector структуру, но с иконками также. Если выводить только HREY_CURRENT_USER тогда все работает нормально, если подключить HKEY_LOCAL_MACHINE тогда уже все данные перекручивает по всех полях. Я думаю время настало перейти на Win API и пробовать там.

                                                C
                                                • 1 июня 2017 г. 12:35

                                                Даже если выводить без иконки или к примеру добавить стандартную на все программы: 

                                                void Test::setAppData(QVector vectorData)
                                                { 
                                                    for (int i = 0; i < vectorData.count(); i++) 
                                                    { 
                                                        allApplicationsItem = new QTreeWidgetItem(allApplications); 
                                                        allApplicationsItem->setIcon(0, vectorData[i].icon); 
                                                        allApplicationsItem->setText(0, vectorData[i].name); 
                                                        allApplicationsItem->setText(1, vectorData[i].version); 
                                                        allApplicationsItem->setText(2, vectorData[i].publisher); 
                                                        allApplicationsItem->setText(3, vectorData[i].installLocation); 
                                                        allApplicationsItem->setText(4, vectorData[i].uninstallLocation); 
                                                    } 
                                                }

                                                Тогда некоторые данные в полях не совпадают. К примеру через QStringList тогда все записывало только была проблема с иконками. А теперь как с иконками так и с данными нет порядка. QVector vectorData это хорошо, но как с ним работать так чтобы все работало.

                                                  Evgenii Legotckoi
                                                  • 2 июня 2017 г. 1:46

                                                  Сдаётся мне, что вы просто где-то создаёте эту структуру с данными и не обнуляете её поля, когда добавляете данные, а в QVector добавляете её через копирование. Вот и получается, что там остаются старые данные. Так что, проблема не в структуре и векторе, а в том, где и как Вы с ними работаете.

                                                  Что касается HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER, то вы сверяли результат с установкой и удаление программ? А также в самом реестре смотрели эти записи? Может там реально пусто и ничего нет в реестре. А Вы пытаетесь получить иконки из ничего. К тому же, записи для обоих ключей могут дублироваться.

                                                    C
                                                    • 2 июня 2017 г. 4:43

                                                    Хорошо. Я это проверю. Спасибо.

                                                      C
                                                      • 1 июля 2017 г. 11:10

                                                      Здравствуйте! Я решил делать по другому, через Win API (Shell):

                                                      Код:
                                                      HRESULT hr = CoInitialize(NULL);
                                                      	if (SUCCEEDED(hr))
                                                      	{
                                                      		LPITEMIDLIST pidlPrograms = NULL;
                                                      		IShellFolder *psfPrograms = NULL;
                                                      		// Installed Apps
                                                      		hr = SHParseDisplayName(TEXT("shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\\0\\::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}"), NULL, &pidlPrograms, 0, NULL);
                                                      		if (SUCCEEDED(hr))
                                                      		{
                                                      			IShellFolder* pshDesktop;
                                                      			hr = SHGetDesktopFolder(&pshDesktop);
                                                      			hr = pshDesktop->BindToObject(pidlPrograms, NULL, IID_IShellFolder, (void**)&psfPrograms);
                                                      			if (SUCCEEDED(hr))
                                                      			{
                                                      				IEnumIDList *ppenum = NULL;
                                                      				LPITEMIDLIST pidlChild = NULL;
                                                      				ULONG celtFetched = 0;
                                                      				hr = psfPrograms->EnumObjects(NULL, SHCONTF_ENABLE_ASYNC | SHCONTF_FLATLIST | SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN | SHCONTF_NONFOLDERS, &ppenum);
                                                      				if (SUCCEEDED(hr))
                                                      				{
                                                      					int nX = 0, nY = 0;
                                                      					hr = ppenum->Next(1, &pidlChild, &celtFetched);
                                                      					while (hr = ppenum->Next(1, &pidlChild, &celtFetched) == S_OK && (celtFetched) == 1)
                                                      					{
                                                      						STRRET strFolderName;
                                                      						TCHAR szFolderName[MAX_PATH];
                                                      						if ((psfPrograms->GetDisplayNameOf(pidlChild, SHGDN_INFOLDER, &strFolderName) == S_OK) &&
                                                      							(StrRetToBuf(&strFolderName, pidlChild, szFolderName, MAX_PATH) == S_OK))
                                                      						{
                                                      							SHFILEINFO sfi = { 0 };
                                                      							PIDLIST_ABSOLUTE pidlAbs = NULL;
                                                      							pidlAbs = ILCombine(pidlPrograms, (LPITEMIDLIST)pidlChild);
                                                      							HIMAGELIST hImageList = (HIMAGELIST)(SHGetFileInfo((LPCWSTR)pidlAbs, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_PIDL));
                                                      							if (hImageList)
                                                      							{
                                                      								// draw text + icon just to test
                                                      								int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
                                                      								int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
                                                      								HDC hDC = GetDC(NULL);
                                                      								DrawIconEx(hDC, nX, nY + 18, ImageList_GetIcon(hImageList, sfi.iIcon, ILD_TRANSPARENT), 0, 0, 0, NULL, DI_IMAGE);
                                                      								RECT rect;
                                                      								SetRect(&rect, nX, nY, nX + 400, nY + 32);
                                                      								SetTextColor(hDC, RGB(255, 255, 255));
                                                      								SetBkColor(hDC, RGB(0, 0, 0));
                                                      								DrawText(hDC, szFolderName, -1, &rect, DT_SINGLELINE);
                                                      								nY += 50;
                                                      								if (nY >= nScreenHeight)
                                                      								{
                                                      									nY = 0;
                                                      									nX += 410;
                                                      								}
                                                      								ReleaseDC(NULL, hDC);
                                                      							}
                                                      						}
                                                      					}
                                                      					ppenum->Release();
                                                      				}
                                                      			}
                                                      			psfPrograms->Release();
                                                      		}
                                                      		CoUninitialize();
                                                      	}
                                                      Все работает, только нужно сделать вывод Пути удаления,  и чтобы работало с Win XP.
                                                      Дело в том что нужно изменить ключ Shell в этой функции - (SHParseDisplayName(TEXT("shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\\0\\::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}"), NULL, &pidlPrograms, 0, NULL);).

                                                      Вот некоторые ключи реестра в Win XP :

                                                      HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\CLSID:

                                                      {0B124F8F-91F0-11D1-B8B5-006008059382} | Data - Installed Apps Enumerator
                                                      {1BC972D6-555C-4FF7-BE2C-C584021A0A6A} | Data - Software installation
                                                      {317E92FC-1679-46FD-A0B5-F08914DD8623} | Data - InstallationAgent Class
                                                      {BACF5C8A-A3C7-11D1-A760-00C04FB9603F} | Data - Software installation


                                                      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\Add-Remove_Programs | Name - Add/Remove Programs

                                                      Но какой комбинировать? Можете помочь? Спасибо.

                                                        C
                                                        • 1 июля 2017 г. 11:13

                                                        Интересно как это сделать? Так как свойства на путь удаления там нет.

                                                         CComVariant vPublisher;
                                                         hr = psf2->MapColumnToSCID(1, &pscid);
                                                         hr = psf2->GetDetailsEx(pidlChild, &pscid, &vPublisher);

                                                        1 индекс это разрабочик, 4 - версия и т.д. Но нет пути удаления.
                                                          Evgenii Legotckoi
                                                          • 2 июля 2017 г. 2:45

                                                          А стандартный ключ удаления программы не подходит?

                                                          HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\название программы
                                                          Если я правильно понимаю, то Shell также использует эти ключи для получения путей программ (Это моё предположение, с этим функционалом WinAPI я не работал)
                                                            C
                                                            • 2 июля 2017 г. 6:53

                                                            Но там не все будут пути и также нужно будет отсортировать по названию программ которые получает через Shell. Я думаю они какой-то свой алгоритм используют для определения пути удаления программ. На Win XP мне нужно CLSID ключ для Панели Управления и Установки и Удаления программ. Пока никак не могу найти эти ключи.

                                                              Evgenii Legotckoi
                                                              • 2 июля 2017 г. 9:08

                                                              Это поможет?

                                                              Action Center {BB64F8A7-BEE7-4E1A-AB8D-7D8273F7FDB6}
                                                              Add Network Location {D4480A50-BA28-11d1-8E75-00C04FA31A86}
                                                              Administrative Tools {D20EA4E1-3957-11d2-A40B-0C5020524153}
                                                              Advanced User Accounts {7A9D77BD-5403-11d2-8785-2E0420524153}
                                                              Applications {4234d49b-0245-4df3-b780-3893943456e1}
                                                              AutoPlay {9C60DE1E-E5FC-40f4-A487-460851A8D915}
                                                              Backup and Restore {B98A2BEA-7D42-4558-8BD1-832F41BAC6FD}
                                                              Biometric Devices {0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
                                                              BitLocker Drive Encryption {D9EF8727-CAC2-4e60-809E-86F80A666C91}
                                                              Bluetooth Devices {28803F59-3A75-4058-995F-4EE5503B023C}
                                                              Briefcase {85BBD920-42AO-1069-A2E4-08002B30309D}
                                                              Color Management {B2C761C6-29BC-4f19-9251-E6195265BAF1}
                                                              Command Folder {437ff9c0-a07f-4fa0-af80-84b6c6440a16}
                                                              Common Places FS Folder {d34a6ca6-62c2-4c34-8a7c-14709c1ad938}
                                                              Computer {20d04fe0-3aea-1069-a2d8-08002b30309d}
                                                              Connect To {38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}
                                                              Control Panel {5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}
                                                              Control Panel (All Tasks) {ED7BA470-8E54-465E-825C-99712043E01C}
                                                              Control Panel (Category view) {26EE0668-A00A-44D7-9371-BEB064C98683}
                                                              Control Panel (Icons view) {21EC2020-3AEA-1069-A2DD-08002B30309D}
                                                              Credential Manager {1206F5F1-0569-412C-8FEC-3204630DFB70}
                                                              Date and Time {E2E7934B-DCE5-43C4-9576-7FE4F75E7480}
                                                              Default Location {00C6D95F-329C-409a-81D7-C46C66EA7F33}
                                                              Default Programs {17cd9488-1228-4b2f-88ce-4298e93e0966} or {E44E5D18-0652-4508-A4E2-8A090067BCB0}
                                                              delegate folder that appears in Computer {b155bdf8-02f0-451e-9a26-ae317cfd7779}
                                                              Desktop Gadgets {37efd44d-ef8d-41b1-940d-96973a50e9e0}
                                                              Desktop in Favorites {04731B67-D933-450a-90E6-4ACD2E9408FE}
                                                              Device Manager {74246bfc-4c96-11d0-abef-0020af6b0b7a}
                                                              Devices and Printers {A8A91A66-3A7D-4424-8D24-04E180695C7A}
                                                              Display (DPI) {C555438B-3C23-4769-A71F-B6D3D9B6053A}
                                                              Ease of Access Center {D555645E-D4F8-4c29-A827-D93C859C4F2A}
                                                              E-mail (default program) {2559a1f5-21d7-11d4-bdaf-00c04f60b9f0}
                                                              Favorites {323CA680-C24D-4099-B94D-446DD2D7249E}
                                                              Flip 3D {3080F90E-D7AD-11D9-BD98-0000947B0257}
                                                              Folder Options {6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}
                                                              Font Settings {93412589-74D4-4E4E-AD0E-E0CB621440FD}
                                                              Fonts {BD84B380-8CA2-1069-AB1D-08000948534}
                                                              Gadgets {37efd44d-ef8d-41b1-940d-96973a50e9e0}
                                                              Game Controllers {259EF4B1-E6C9-4176-B574-481532C9BCE8}
                                                              Games Explorer {ED228FDF-9EA8-4870-83b1-96b02CFE0D52}
                                                              Get Programs {15eae92e-f17a-4431-9f28-805e482dafd4}
                                                              Getting Started {CB1B7F8C-C50A-4176-B604-9E24DEE8D4D1}
                                                              Help and Support {2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}
                                                              HomeGroup {67CA7650-96E6-4FDD-BB43-A8E774F73A57} or {B4FB3F98-C1EA-428d-A78A-D1F5659CBA93}
                                                              Indexing Options {87D66A43-7B11-4A28-9811-C86EE395ACF7}
                                                              Infared {A0275511-0E86-4ECA-97C2-ECD8F1221D08}
                                                              Installed Updates {d450a8a1-9568-45c7-9c0e-b4f9fb4537bd}
                                                              Internet Explorer {871C5380-42A0-1069-A2EA-08002B30309D}
                                                              Internet Options {A3DD4F92-658A-410F-84FD-6FBBBEF2FFFE}
                                                              iSCCI Initiator {A304259D-52B8-4526-8B1A-A1D6CECC8243}
                                                              Keyboard Properties {725BE8F7-668E-4C7B-8F90-46BDB0936430}
                                                              Libraries {031E4825-7B94-4dc3-B131-E946B44C8DD5}
                                                              Location {00C6D95F-329C-409a-81D7-C46C66EA7F33}
                                                              Location and Other Sensors {E9950154-C418-419e-A90A-20C5287AE24B}
                                                              Manage Wireless Networks {1fa9085f-25a2-489b-85d4-86326eedcd87}
                                                              Mobility Center {5ea4f148-308c-46d7-98a9-49041b1dd468}
                                                              Mouse Properties {6C8EEC18-8D75-41B2-A177-8831D59D2D50}
                                                              My Documents {450d8fba-ad25-11d0-98a8-0800361b1103}
                                                              Network {F02C1A0D-BE21-4350-88B0-7367FC96EF3C}
                                                              Network and Sharing Center 8E908FC9-BECC-40f6-915B-F4CA0E70D03D}
                                                              Network Center Notification area pop-up {38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}
                                                              Network Connections {7007ACC7-3202-11D1-AAD2-00805FC1270E} or {992CFFA0-F557-101A-88EC-00DD010CCC48}
                                                              Network Map {E7DE9B1A-7533-4556-9484-B26FB486475E}
                                                              Network Neighborhood {208D2C60-3AEA-1069-A2D7-O8002B30309D}
                                                              Network (WorkGroup) Places {208D2C60-3AEA-1069-A2D7-08002B30309D}
                                                              Notification Area Icons {05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
                                                              NVIDIA Control Panel (if driver installed) {0bbca823-e77d-419e-9a44-5adec2c8eeb0}
                                                              Offline Files Folder {AFDB1F70-2A4C-11d2-9039-00C04F8EEB3E}
                                                              Parental Controls {96AE8D84-A250-4520-95A5-A47A7E3C548B}
                                                              Pen and Touch {F82DF8F7-8B9F-442E-A48C-818EA735FF9B}
                                                              People Near Me {5224F545-A443-4859-BA23-7B5A95BDC8EF}
                                                              Performance Information and Tools {78F3955E-3B90-4184-BD14-5397C15F1EFC}
                                                              Personalization {ED834ED6-4B5A-4bfe-8F11-A626DCB6A921}
                                                              Phone & Modem Location Information {40419485-C444-4567-851A-2DD7BFA1684D}
                                                              Portable Devices {35786D3C-B075-49b9-88DD-029876E11C01}
                                                              Power Options {025A5937-A6BE-4686-A844-36FE4BEC8B6D}
                                                              Previous Versions Results Folder {f8c2ab3b-17bc-41da-9758-339d7dbf2d88}
                                                              printhood delegate folder {ed50fc29-b964-48a9-afb3-15ebb9b97f36}
                                                              Printers {2227A280-3AEA-1069-A2DE-08002B30309D} or {863aa9fd-42df-457b-8e4d-0de1b8015c60}
                                                              Programs and Features {7b81be6a-ce2b-4676-a29e-eb907a5126c5}
                                                              Public folder {4336a54d-038b-4685-ab02-99bb52d3fb8b}
                                                              Recent Places {22877a6d-37a1-461a-91b0-dbda5aaebc99}
                                                              Recovery (System Restore) {9FE63AFD-59CF-4419-9775-ABCC3849F861}
                                                              Recycle Bin {645FF040-5081-101B-9F08-00AA002F954E}
                                                              Region and Language {62d8ed13-c9d0-4ce8-a914-47dd628fb1b0}
                                                              RemoteApp and Desktop Connections {241D7C96-F8BF-4F85-B01F-E2B043341A4B}
                                                              Run {2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
                                                              Search {2559a1f0-21d7-11d4-bdaf-00c04f60b9f0}
                                                              Search Results {9343812e-1c37-4a49-a12e-4b2d810d956b}
                                                              Set Program Access and Defaults {2559a1f7-21d7-11d4-bdaf-00c04f60b9f0}
                                                              Show Desktop {3080F90D-D7AD-11D9-BD98-0000947B0257}
                                                              Sound {F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}
                                                              Speech Recognition {58E3C745-D971-4081-9034-86E34B30836A}
                                                              Sync Center {9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}
                                                              Sync Setup Folder {2E9E59C0-B437-4981-A647-9C34B9B90891}
                                                              System {BB06C0E4-D293-4f75-8A90-CB05B6477EEE}
                                                              System Icons {05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} \SystemIcons
                                                              Tablet PC Settings {80F3F1D5-FECA-45F3-BC32-752C152E456E}
                                                              Taskbar and Start Menu {0DF44EAA-FF21-4412-828E-260A8728E7F1}
                                                              Text to Speech {D17D1D6D-CC3F-4815-8FE3-607E7D5D10B3}
                                                              Time and Date {E2E7934B-DCE5-43C4-9576-7FE4F75E7480}
                                                              Troubleshooting {C58C4893-3BE0-4B45-ABB5-A63E4B8C8651}
                                                              User Accounts {60632754-c523-4b62-b45c-4172da012619}
                                                              User Folder {59031a47-3f72-44a7-89c5-5595fe6b30ee}
                                                              User Pinned {1f3427c8-5c10-4210-aa03-2ee45287d668}
                                                              Web Browser (default) {871C5380-42A0-1069-A2EA-08002B30309D}
                                                              Windows Anytime Upgrade {BE122A0E-4503-11DA-8BDE-F66BAD1E3F3A}
                                                              Windows Cardspace {78CB147A-98EA-4AA6-B0DF-C8681F69341C}
                                                              Windows Defender {D8559EB9-20C0-410E-BEDA-7ED416AECC2A}
                                                              Windows Features {67718415-c450-4f3c-bf8a-b487642dc39b}
                                                              WEI {78F3955E-3B90-4184-BD14-5397C15F1EFC}
                                                              Windows Firewall {4026492F-2F69-46B8-B9BF-5654FC07E423}
                                                              Windows Mobility Center {5ea4f148-308c-46d7-98a9-49041b1dd468}
                                                              Windows SideShow {E95A4861-D57A-4be1-AD0F-35267E261739}
                                                              Windows Update {36eef7db-88ad-4e81-ad49-0e313f0c35f8}
                                                                C
                                                                • 2 июля 2017 г. 10:12

                                                                Да, я знаю об этих ключах. Но на Панель Управления на Win XP нет или они не работают.

                                                                  Evgenii Legotckoi
                                                                  • 2 июля 2017 г. 10:17

                                                                  Даже не знаю тогда ((

                                                                    Комментарии

                                                                    Только авторизованные пользователи могут публиковать комментарии.
                                                                    Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                                                    e
                                                                    • ehot
                                                                    • 1 апреля 2024 г. 0:29

                                                                    C++ - Тест 003. Условия и циклы

                                                                    • Результат:78баллов,
                                                                    • Очки рейтинга2
                                                                    B

                                                                    C++ - Тест 002. Константы

                                                                    • Результат:16баллов,
                                                                    • Очки рейтинга-10
                                                                    B

                                                                    C++ - Тест 001. Первая программа и типы данных

                                                                    • Результат:46баллов,
                                                                    • Очки рейтинга-6
                                                                    Последние комментарии
                                                                    k
                                                                    kmssr9 февраля 2024 г. 5:43
                                                                    Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                                                    АК
                                                                    Анатолий Кононенко5 февраля 2024 г. 12:50
                                                                    Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                                                    EVA
                                                                    EVA25 декабря 2023 г. 21:30
                                                                    Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                                                                    J
                                                                    JonnyJo25 декабря 2023 г. 19:38
                                                                    Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                                                                    G
                                                                    Gvozdik19 декабря 2023 г. 8:01
                                                                    Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                                                                    Сейчас обсуждают на форуме
                                                                    a
                                                                    a_vlasov14 апреля 2024 г. 16:41
                                                                    Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                                                                    Павел Дорофеев
                                                                    Павел Дорофеев14 апреля 2024 г. 12:35
                                                                    QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                                                                    f
                                                                    fastrex4 апреля 2024 г. 14:47
                                                                    Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
                                                                    P
                                                                    Pisych27 февраля 2023 г. 15:04
                                                                    Как получить в массив значения из связанной модели? Спасибо, разобрался:))
                                                                    AC
                                                                    Alexandru Codreanu19 января 2024 г. 22:57
                                                                    QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…

                                                                    Следите за нами в социальных сетях