我想通过编辑注册表文件来更改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(或注册表)需要更改这些信息 某处。但我不知道在哪里。
答案 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。