Как изменить поставщик поиска по умолчанию IE 9 путем редактирования реестра с помощью программы C ++? - PullRequest
0 голосов
/ 29 февраля 2012

Я хочу изменить поисковый поставщик по умолчанию IE (9), отредактировав файл реестра. Я следовал инструкциям, приведенным в ссылке: http://www.online -tech-tips.com / internet-explorer-tips / change-default-search-engine-ie / .

Но когда я изменяю значение DefaultScope на область в SearchScopes, затем перезагружаю компьютер или открываю IE, выполняю поиск в адресной строке или закрываю IE. Значение DefaultScope - восстановить предыдущее значение.

Почему? Или в чем моя ошибка?

Как программно изменить поисковую систему IE (не в IE, может быть через реестр или в моем коде C ++)? (Я пишу программу на C ++, которая должна изменить поисковую систему IE)

Я написал эту функцию для Firefox или Chrome. Это работает хорошо. В Firefox эта информация хранится в файле prefs.js. Я могу читать или записывать информацию, необходимую для этого файла легко. С Chrome, эта информация хранится в двух файлах в папке профиля пользователя: Настройки и файлы веб-данных. Файл настроек является файлом JSON. я получить эту информацию легко, анализируя этот файл JSON. Но установить Информация о поставщике поисковой системы для Chrome. Нам нужно изменить эти информация в файле веб-данных. Файл веб-данных является файлом SQLite. я использую Библиотека SQLite для доступа к этому.

С помощью Internet Explorer я могу получить эту информацию в этом реестре дорожка. Но я не могу установить эту информацию с этим путем реестра. Так что я думаю, как Chrome, IE (или реестр) необходимо изменить эту информацию где-то. Но я не знаю где.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Здесь - подробный ответ на ваш вопрос.

Существует два варианта, которые вы можете выбрать из использования IOpenServiceManager:

CComQIPtr<IOpenServiceManager> spManager;
check(spManager.CoCreateInstance(__uuidof(OpenServiceManager), CLSCTX_ALL));

CComQIPtr<IOpenService> spService;
check(spManager->InstallService(PU_POSTINSTALL_ANT_SEARCH_PROVIDER_XML, &spService));

if(makeItDefault)
{
    // Request that the user change their search default
    check(spService->SetDefault( TRUE, hPromptParent ));
}

или измените реестр:

LPCWSTR searchScopesKeyName = L"Software\\Microsoft\\Internet Explorer\\SearchScopes";

createKey(rootKey, HKEY_CURRENT_USER, searchScopesKeyName);

std::wstring clsidString = findProviderClsid(false);
if( clsidString.empty() )
    clsidString = mc_providerClsidString;

if( makeItDefault )
    setStringValue( rootKey, mc_defaultScopeValueName, clsidString.c_str() );

ATL::CRegKey subKey;
createKey(subKey, rootKey.m_hKey, clsidString.c_str() );

setStringValue( subKey, mc_displayNameValueName, mc_providerName );
setStringValue( subKey, mc_faviconUrlValueName, mc_providerFaviconURL );
setStringValue( subKey, mc_urlValueName, mc_providerURL );
0 голосов
/ 24 мая 2016

Просто отметим, что Функция SetDefault устарела в браузере Microsoft Edge. Также после обновления KB3148198 он блокируется. Функция вернется OS_E_CANCELLED вместо.

...