如何通过注册表修改IE 9的默认搜索提供程序通过C ++程序编辑?

时间:2012-02-29 04:10:43

标签: c++ windows windows-7 registry internet-explorer-9

我想通过编辑注册表文件来更改IE(9)的默认搜索提供程序。我已按照链接中提供的步骤进行操作:http://www.online-tech-tips.com/internet-explorer-tips/change-default-search-engine-ie/

但是当我将DefaultScope值更改为SearchScopes中的范围,然后重新启动计算机,或打开IE,在地址栏中搜索或关闭IE。 DefaultScope的值将恢复为之前的值。

为什么呢?或者我的错误是什么?

如何以编程方式更改IE的搜索提供程序引擎(不是在IE中,可能是通过注册表,还是在我的C ++代码中)? (我编写了一个需要更改IE搜索提供程序引擎的C ++程序)

  

我已经为Firefox或Chrome编写了此功能。它运作良好。   使用Firefox,这些信息存储在prefs.js文件中。我可以   轻松读取或写入此文件所需的信息。使用Chrome,   这些信息存储在用户配置文件夹中的两个文件中:   首选项和Web数据文件。 Preferences文件是JSON文件。一世   通过解析此JSON文件轻松获取这些信息。但要设定   Chrome的搜索引擎提供商信息。我们需要改变这些   Web数据文件中的信息。 Web数据文件是SQLite文件。我用   SQLite库来访问它。

     

使用Internet Explorer,我可以在该注册表中获取这些信息   路径。但我无法使用该注册表路径设置这些信息。所以我   认为,像Chrome,IE(或注册表)需要更改这些信息   某处。但我不知道在哪里。

2 个答案:

答案 0 :(得分:3)

Here是对您问题的详细解答。

您可以从使用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 );

答案 1 :(得分:0)

请注意,在Microsoft Edge浏览器上已弃用SetDefault function。此外,在KB3148198更新后,它被阻止了。功能将返回 而是OS_E_CANCELLED。