C
Cobra91151May 30, 2017, 4:09 p.m.

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

с++, 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
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

33
Evgenii Legotckoi
  • May 31, 2017, 2:37 a.m.

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

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

    C
    • May 31, 2017, 4:40 a.m.

    Да, но как отсеивать эти данные по (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
      • May 31, 2017, 5:13 a.m.

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

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

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

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

        C
        • May 31, 2017, 6:06 a.m.

        Да, я хочу получить почти такой результат как в Установки и Удаления программ. Задачи: 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
          • May 31, 2017, 6:08 a.m.

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

            C
            • May 31, 2017, 9:46 a.m.

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

            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
              • May 31, 2017, 11:23 a.m.

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

              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
                • May 31, 2017, 4:30 p.m.

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

                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
                  • June 1, 2017, 2:31 a.m.

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

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

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

                  QVector<AppsData> vectorData;

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

                    C
                    • June 1, 2017, 2:46 a.m.

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

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

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

                        C
                        • June 1, 2017, 2:58 a.m.

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

                          C
                          • June 1, 2017, 3:13 a.m.

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

                          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
                            • June 1, 2017, 3:15 a.m.
                            Точнее вот эта ошибка:
                            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
                              • June 1, 2017, 3:22 a.m.

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

                                C
                                • June 1, 2017, 4:11 a.m.

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

                                  C
                                  • June 1, 2017, 4:26 a.m.

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

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

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

                                      C
                                      • June 1, 2017, 5:34 a.m.

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

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

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

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

                                            Я установил

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

                                              C
                                              • June 1, 2017, 9:05 a.m.

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

                                              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
                                                • June 1, 2017, 12:35 p.m.

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

                                                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
                                                  • June 2, 2017, 1:46 a.m.

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

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

                                                    C
                                                    • June 2, 2017, 4:43 a.m.

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

                                                      C
                                                      • July 1, 2017, 11:10 a.m.

                                                      Здравствуйте! Я решил делать по другому, через 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
                                                        • July 1, 2017, 11:13 a.m.

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

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

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

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

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

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

                                                              Evgenii Legotckoi
                                                              • July 2, 2017, 9:08 a.m.

                                                              Это поможет?

                                                              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
                                                                • July 2, 2017, 10:12 a.m.

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

                                                                  Evgenii Legotckoi
                                                                  • July 2, 2017, 10:17 a.m.

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

                                                                    Comments

                                                                    Only authorized users can post comments.
                                                                    Please, Log in or Sign up
                                                                    AD

                                                                    C ++ - Test 004. Pointers, Arrays and Loops

                                                                    • Result:50points,
                                                                    • Rating points-4
                                                                    m

                                                                    C ++ - Test 004. Pointers, Arrays and Loops

                                                                    • Result:80points,
                                                                    • Rating points4
                                                                    m

                                                                    C ++ - Test 004. Pointers, Arrays and Loops

                                                                    • Result:20points,
                                                                    • Rating points-10
                                                                    Last comments
                                                                    Evgenii Legotckoi
                                                                    Evgenii LegotckoiNov. 1, 2024, 12:37 a.m.
                                                                    Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                                                    A
                                                                    ALO1ZEOct. 19, 2024, 6:19 p.m.
                                                                    Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                                                    ИМ
                                                                    Игорь МаксимовOct. 5, 2024, 5:51 p.m.
                                                                    Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                                                    d
                                                                    dblas5July 5, 2024, 9:02 p.m.
                                                                    QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                                                    k
                                                                    kmssrFeb. 9, 2024, 5:43 a.m.
                                                                    Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                                                    Now discuss on the forum
                                                                    Evgenii Legotckoi
                                                                    Evgenii LegotckoiJune 25, 2024, 1:11 a.m.
                                                                    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                                                    t
                                                                    tonypeachey1Nov. 15, 2024, 5:04 p.m.
                                                                    google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                                                    NSProject
                                                                    NSProjectJune 4, 2022, 1:49 p.m.
                                                                    Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                                                                    9
                                                                    9AnonimOct. 25, 2024, 7:10 p.m.
                                                                    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                                                                    Follow us in social networks