Standard Browser des Systems herausfinden



  • Hi

    Ich ich suche nach einer zuverlässigen Möglichkeit den Standardbrowser eines Windows Systems zu öffnen.

    Problem ist dabei folgendes:

    ShellExecuteA (NULL, "open", "http://www.google.at", NULL, NULL, SW_HIDE);
    

    Das funktioniert super für URLs, aber bei Files funktioniert das nicht mehr zuverlässig.

    ShellExecuteA (NULL, "open", "C:\\index.html", NULL, NULL, SW_HIDE);
    

    Wenn nun Frontpage oder whatever für *.html files festgelegt ist wird eben diese Programm geöffnet und nicht der Browser.

    Erster Gedanke war nun das muss doch in der Registry zu finden sein:

    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice
    HKEY_CLASSES_ROOT\http\shell\open\command
    HKEY_CLASSES_ROOT\htmlfile\shell\open\command
    ...
    

    Die sind alle unbrauchbar. Zumindest stimmen sie nicht bei mir (Win Vista Business 64bit)

    Letzte Idee die mir dann noch kam war "FindExecutableA"

    FindExecutableA ("http://www.google.at", NULL, temp);
    

    Die Funktion scheint aber für URLs nicht zu funktionieren, zumindest bekomme ich nen leeren string zurück 😡

    Im IRC wurde ich dann noch auf folgenden Beitrag gestoßen:
    http://forum.fachinformatiker.de/basic/86346-standard-browser-dos-aufrufen.html

    Hier wird

    rundll32 url.dll,FileProtocolHandler "http://www.irgendwas.de"
    

    als Lösung angepriesen. Leider habe ich 0 Plan wie ich das verwenden soll. Wenn mir da wer weiterhelfen könnte wäre das super 🙂

    Wenn wer einen anderen Weg kennt wie ich den Standardbrowser herausfinde/geöffnet bekomme nehm ich das auch gern 😉

    yogg



  • Probiers einfach mal mit:

    ShellExecuteA (NULL, "open", "file:///C:/index.html", NULL, NULL, SW_HIDE);
    


  • Das klappt leider auch nicht. Wenn *.html auf ein anderes Programm gelinkt (in meinem fall Notepad++) ist, dann macht er es weiterhin mit diesem auf 😞

    yogg



  • Der Standardbrowser wird in der Registry eingetragen.

    Unter: HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\(Default-Wert) findet man den System-weiten Standardbrowser (z.B. "iexplore.exe")

    Unter HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\(Default-Wert)
    findet man den Standardbrowser des aktuellen Benutzers (z.B. "firefox.exe")

    Wo der Browser ("firefox.exe" / "iexplore.exe" / ...) nun genau sitzt, findet man in dem entsprechenden Eintrag unter:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\XXX\shell\open\command
    ...wobei XXX dann "firefox.exe" bzw. "iexplore.exe" ist.

    Vorgehensweise ist also:
    - Wert unter HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\(Default-Wert) auslesen
    - Anschließend prüfen ob HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\(Default-Wert) nicht leer ist und in dem Falle diesen Wert als Default-Browser nehmen
    - Unter HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\XXX\shell\open\command nachschauen wie man den entsprechenden Browser aufrufen soll...


  • Mod

    Man könnte den IE oder anderen Brwoser auch an seiner Verknüfung mit .html Dateien ermitteln.

    Dazu kann man AssocQueryString verwenden.
    Dazu sind keine Kenntnisse der Registry notwendig.
    http://msdn.microsoft.com/en-us/library/bb773471(VS.85).aspx



  • Danke für die hilfe 🙂

    @ Martin Richter

    DWORD dwsize = 255;
    char buffer[255];
    memset (buffer, 0, sizeof (buffer));
    
    HRESULT result = AssocQueryStringA (ASSOCF_INIT_DEFAULTTOSTAR, ASSOCSTR_COMMAND, ".html", NULL, buffer, &dwsize);
    
    printf ("Result: %X\n", result);
    printf ("Laenge: %d\n", dwsize);
    printf ("Rueckgabe: %s\n", buffer);
    

    Das funktioniert zwar fein, löst mein Problem nur leider nicht. Wenn Frontpage an *.html dateien gebunden ist, dann liefert mir die funktion Frontpage zurück.

    @ geeky
    Die Einträge sind fein bis auf einen kleinen Schönheitsfehler.
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet*IEXPLORE.EXE*\shell\open\command
    ist vorhanden

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet*FIREFOX.EXE*
    den Schlüssel gibt es nicht (bei mir) 😞

    Aber über
    HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
    bekomm ich jetzt wenigstens raus was der Standardbrowser ist. Jetzt muss ich nur noch die zugehörige *.exe finden, und hoffe das der KEY auf allen maschinen ab 2000\XP existiert und auch stimmt.

    Ich teste das mal

    yogg



  • TCHAR szApp[MAX_PATH];
    DWORD cch = _countof(szApp);
    AssocQueryString(0, ASSOCSTR_EXECUTABLE, TEXT("http"), TEXT("open"), szApp, &cch);
    


  • Danke Mox das haut einwandfrei hin 🙂

    yogg


Anmelden zum Antworten