Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: WinAPI ::  Standard Browser des Systems herausfinden     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
yogg
Unregistrierter




Beitrag yogg Unregistrierter 11:33:48 10.03.2010   Titel:   Standard Browser des Systems herausfinden            Zitieren

Hi

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

Problem ist dabei folgendes:
C/C++ Code:
ShellExecuteA (NULL, "open", "http://www.google.at", NULL, NULL, SW_HIDE);
C/C++ Code:
ShellExecuteA (NULL, "open", "http://www.google.at", NULL, NULL, SW_HIDE);
C/C++ Code:
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.
C/C++ Code:
ShellExecuteA (NULL, "open", "C:\\index.html", NULL, NULL, SW_HIDE);
C/C++ Code:
ShellExecuteA (NULL, "open", "C:\\index.html", NULL, NULL, SW_HIDE);
C/C++ Code:
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:
Code:
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
...
Code:
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
...
Code:
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"
C/C++ Code:
FindExecutableA ("http://www.google.at", NULL, temp);
C/C++ Code:
FindExecutableA ("http://www.google.at", NULL, temp);
C/C++ Code:
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 :mad:

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

Hier wird
Code:
rundll32 url.dll,FileProtocolHandler "http://www.irgendwas.de"
Code:
rundll32 url.dll,FileProtocolHandler "http://www.irgendwas.de"
Code:
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
evilissimo
Chefkoch

Benutzerprofil
Anmeldungsdatum: 11.11.2003
Beiträge: 2281
Beitrag evilissimo Chefkoch 12:17:21 10.03.2010   Titel:              Zitieren

Probiers einfach mal mit:

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

_________________
evilissimo - R.I.P. dmr
< Moderator im C++/CLI Forum und im C++ Forum >
About Singletons: "Anyway, if our experts can make this mistake, you have made it and you don't even know about it."


Zuletzt bearbeitet von evilissimo am 12:17:31 10.03.2010, insgesamt 1-mal bearbeitet
yogg
Unregistrierter




Beitrag yogg Unregistrierter 13:14:54 10.03.2010   Titel:              Zitieren

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
geeky
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 5983
Beitrag geeky Mitglied 22:43:26 10.03.2010   Titel:              Zitieren

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...
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13139
Beitrag Martin Richter Moderator 08:03:39 11.03.2010   Titel:              Zitieren

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

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
yogg
Unregistrierter




Beitrag yogg Unregistrierter 10:05:32 11.03.2010   Titel:              Zitieren

Danke für die hilfe :)

@ Martin Richter
C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
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);
C/C++ Code:
1
2
3
4
5
6
7
8
9
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);
C/C++ Code:
1
2
3
4
5
6
7
8
9
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
Mox
Unregistrierter




Beitrag Mox Unregistrierter 14:43:10 11.03.2010   Titel:              Zitieren

C/C++ Code:
TCHAR szApp[MAX_PATH];
DWORD cch = _countof(szApp);
AssocQueryString(0, ASSOCSTR_EXECUTABLE, TEXT("http"), TEXT("open"), szApp, &cch);
C/C++ Code:
TCHAR szApp[MAX_PATH];
DWORD cch = _countof(szApp);
AssocQueryString(0, ASSOCSTR_EXECUTABLE, TEXT("http"), TEXT("open"), szApp, &cch);
C/C++ Code:
TCHAR szApp[MAX_PATH];
DWORD cch = _countof(szApp);
AssocQueryString(0, ASSOCSTR_EXECUTABLE, TEXT("http"), TEXT("open"), szApp, &cch);
yogg
Unregistrierter




Beitrag yogg Unregistrierter 13:45:47 15.03.2010   Titel:              Zitieren

Danke Mox das haut einwandfrei hin :)

yogg
C/C++ Forum :: WinAPI ::  Standard Browser des Systems herausfinden   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.