puedo predeterminado poner pagina navegador motor inicio google establecer cual como chrome cambiar busqueda buscador c++ internet-explorer internet-explorer-8 internet-explorer-9 search-engine

c++ - predeterminado - motor de busqueda google url



Establezca el proveedor de motor de búsqueda predeterminado de IE con IOpenServiceManager:: InstallService (1)

Me gustaría configurar el proveedor del motor de búsqueda predeterminado de IE con IOpenServiceManager :: InstallService:

  1. Pertenece al enlace http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_elements . Creé SearchProviderInfo.xml de esta manera:

    <?xml version="1.0" encoding="UTF-8"?>
    <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
    <ShortName>Web Search</ShortName>
    <Description>Use Example.com to search the Web.</Description>
    <Tags>example web</Tags>
    <Contact>[email protected]</Contact>
    <Url type="application/atom+xml"
    template="http://example.com/?q={searchTerms}&pw={startPage?}&format=atom"/>
    <Url type="application/rss+xml"
    template="http://example.com/?q={searchTerms}&pw={startPage?}&format=rss"/>
    <Url type="text/html"
    template="http://example.com/?q={searchTerms}&pw={startPage?}"/>
    <LongName>Example.com Web Search</LongName>
    <Image height="64" width="64" type="image/png">http://example.com/websearch.png</Image>
    <Image height="16" width="16" type="image/vnd.microsoft.icon">http://example.com/websearch.ico</Image>
    <Query role="example" searchTerms="cat" />
    <Developer>Example.com Development Team</Developer>
    <Attribution>
    Search data Copyright 2005, Example.com, Inc., All Rights Reserved
    </Attribution>
    <SyndicationRight>open</SyndicationRight>
    <AdultContent>false</AdultContent>
    <Language>en-us</Language>
    <OutputEncoding>UTF-8</OutputEncoding>
    <InputEncoding>UTF-8</InputEncoding>
    </OpenSearchDescription>

  2. Pertenece al enlace http://msdn.microsoft.com/en-us/library/cc849088%28v=vs.85%29.aspx . Creo el proyecto "SetDefaultHelper" de esta manera:

    #include <windows.h> #include <atlbase.h> #include <wininet.h> #include <urlmon.h> #include <string> #include "openservice.h" #pragma comment(lib, "urlmon.lib") void DisplayUsage() { wprintf(L"/r/nSetDefaultHelper.exe -- Call SetDefault API on a search provider"); wprintf(L"/r/n"); wprintf(L"/r/nUSAGE: SetDefaultHelper.exe <option>"); wprintf(L"/r/n"); wprintf(L"/r/nOptions (these are mutually exclusive!):"); wprintf(L"/r/n"); wprintf(L"/r/n /guid <guid> GUID of an installed search provider"); wprintf(L"/r/n /url <url> URL of an OpenSearch Description file"); wprintf(L"/r/n"); } int __cdecl wmain(__in int argc, __in_ecount(argc) WCHAR* argv[]) { HRESULT hr = E_FAIL; BOOL fComInitialized = FALSE; if (3 != argc) { DisplayUsage(); } else if (SUCCEEDED(CoInitialize(NULL))) { fComInitialized = TRUE; CComPtr<IOpenServiceManager> spManager; hr = spManager.CoCreateInstance(CLSID_OpenServiceManager); if (SUCCEEDED(hr)) { CComPtr<IOpenService> spService; if (0 == _wcsicmp(argv[1], L"/guid")) { // Get an IOpenService pointer from the GUID. WCHAR szEscaped[INTERNET_MAX_URL_LENGTH] = L""; DWORD cchEscaped = ARRAYSIZE(szEscaped); hr = UrlEscape(argv[2], szEscaped, &cchEscaped, URL_ESCAPE_SEGMENT_ONLY); if (SUCCEEDED(hr)) { std::wstring wsOsid(L"x-osid:1:search:"); wsOsid += szEscaped; hr = spManager->GetServiceByID(wsOsid.c_str(), &spService); } } else if (0 == _wcsicmp(argv[1], L"/url")) { // Install the provider to get an IOpenService pointer. //CComPtr<IUri> spUri; //hr = CreateUri(argv[2], 0, 0, &spUri); //if (SUCCEEDED(hr)) //{ hr = spManager->InstallService(argv[2], &spService); //} } else { DisplayUsage(); hr = E_FAIL; }

    if (SUCCEEDED(hr)) { hr = spService-&#62;SetDefault(TRUE, NULL); } } } if (fComInitialized) { CoUninitialize(); } return hr; }

  3. Construyo el proyecto bien Ambos archivos, SetDefaultHelper.exe y SearchProviderInfo.xml, son la misma carpeta. En la configuración del proyecto, establezca Propiedades de configuración> Depuración> Comandos Argumentos = / url absolutePaht / searchProvider.xml . Luego ejecute la depuración (F10), en la línea "hr = CreateUri (argv [2], 0, 0, y spUri);", el rusult hr es tan extraño. No sé por qué. ¿Me puedes ayudar?

Muchas gracias.

[Resuelto]:
1. No es necesario CreateUri // comentado
2. Use un camino absolutamente.


Use la ruta absoluta y UrlCreateFromPath para crear un file:/// como URL, pase esa URL a InstallService .

Entre, parece que tu XML tiene un error.

WCHAR szURL[MAX_PATH] = L""; DWORD cchURL = ARRAYSIZE(szURL); hr = ::UrlCreateFromPath(argv[2], szURL, &cchURL, 0); if (SUCCEEDED(hr)) { hr = spManager->InstallService(argv[2], &spService); // Now we can set it as the default. if (SUCCEEDED(hr)) { hr = spService->SetDefault(TRUE, NULL); if (hr == OS_E_CANCELLED) { hr = E_ACCESSDENIED; // by the user! } } }