C# Standardbrowser schließen?

2 Antworten

Das dürfte etwas komplizierter sein :)

Der einfachste Weg wäre, dass Du durch die Prozesse gehst und nach Namen (z.B. "firefox") suchst. Dann hast Du die Browser-Prozesse, die offen sind, weißt allerdings nicht, ob das der Default-Browser ist.

Leider ist es nicht ganz so einfach, den exe-Pfad des Standard-Browsers herauszufinden, zumindest hab ich keinen einfachen Weg gefunden.

Was ich aber gefunden habe, ist diese Antwort hier.

In folgenden Registry-Pfaden findest Du für http- und https-Links den eingestellten Browser als "ProdId".

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\URLAssociations\https\UserChoice
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\URLAssociations\http\UserChoice

Im Fall von Chrome steht bei mir "ChromeHTML", das ändert sich je Default-Browser-Einstellung.
In folgenden Pfaden findest Du dann wiederum die ProgId wieder und dazu ein weiterer Registry-Referenz-Pfad:

HKEY_CURRENT_USER\SOFTWARE\RegisteredApplications
HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications

Chrome ist bei mir unter LOCAL_MACHINE zu finden und der hinterlegte Pfad ist Folgender:

Software\Clients\StartMenuInternet\Google Chrome\Capabilities

Der Pfad ist nur eine Referenz und nicht vollständig, dem fehlt der Root und das muss der selbe Root sein, wie der, unter dem Du den Eintrag gefunden hast. Für Chrome also "HKEY_LOCAL_MACHINE", für andere Programme könnte es aber auch "HKEY_CURRENT_USER" sein.

Der follständige Pfad ist also:

HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\Google Chrome\Capabilities

Dort stehen schon ein paar Infos drin, wie eine Beschreibung, Icon oder Name. Spannend könnte das Icon sein, denn das kann in der Exe direkt hinterlegt sein, muss aber nicht. Besser wäre aber, wenn Du den tatsächlichen Start-Pfad hast und dazu schaust Du dir am besten die anderen Keys vor "Capabilities" an.

Dort findet sich nochmal das Icon, eine installInfo und ein open-command. Den findest Du über den Pfad:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Google Chrome\shell\open\command

Der Standard-Wert ist der Pfad zur Exe in Anführungszeichen und nach diesem Exe-Pfad kannst Du in der Prozess-Liste suchen. Wenn Du die Prozesse dann hast, kannst Du ihn ganz einfach beenden.

Für das alles brauchst Du die Registry-Klasse.

|

Frage 2:

Tabs schließen geht wenn dann nur über eine API vom Browser, das musst Du dann pro Browser einzeln recherchieren.
Oder Du bietest ein Extension für den Browser an, die wiederum auf Befehle von deinem Programm reagieren kann. Ob und wie das funktioniert, weiß ich nicht, ich hab noch nie eine Browser-Extension entwickelt.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler

Palladin007  10.05.2020, 18:09

PS:

Ich hab mir parallel die Daten für Firefox und Chrome angeschaut.
Ob sich das bei anderen Browsern irgendwie unterscheidet, weiß ich nicht, würde aber nicht davon ausgehen.

0
BitteHelfen346 
Beitragsersteller
 10.05.2020, 22:13

Hi könntest du mir vllt einen kleinen Code basteln?

0

Zum ersten: https://docs.microsoft.com/de-de/dotnet/api/system.diagnostics.process

Zum zweiten: Nein. Zumindest keine standardisierte Methode. Und selbst wenn du dir da was zusammenbastelst, kann ein einziges kleines Browser-Update ausreichen um deine Methode wieder funktionsunfähig zu machen. Im besten Fall würde das über ein passendes Browser-Addon/-Plugin gehen, das mit deinem Programm kommuniziert, aber dafür müsstest du auch dieses programmieren und es müsste dort, wo es eingesetzt werden soll auch erstmal installiert werden.

P.S.: Standard...


Palladin007  10.05.2020, 18:07

Die Process-Klasse hilft nicht, wenn Du nicht weißt, wonach Du suchen musst.

Es gibt neben den paar bekannten Browsern noch passig andere Browser und Namen will man nicht alle im Code stehen haben.

Besser wäre da der Exe-Pfad und den kann man über die Registry herausfinden, siehe meine Antwort.

0
Isendrak  10.05.2020, 19:02
@Palladin007

Natürlich hilft die Process-Klasse dabei.

Zumindest dann, wenn ichs korrekt verstanden hab, dass er den Browser erst starten und dann später wieder schließen will.

Und auch wenn man deine Methode verwendet um den Dateinamen aus der Registry zu bekommen, braucht man immer noch die Process-Klasse um laufende Prozesse des Browsers zu finden und zu beenden.

0
Palladin007  10.05.2020, 20:14
@Isendrak

Die Process-Klasse kennt er aber schon, steht in der Frage.

Aber ja, wenn der Process selber gestartet wurde, ist das natürlich einfach:
Referenz nehmen und schließen :D

Ich bin davon ausgegangen, dass der Prozess nicht bekannt ist und man ihn erst suchen muss.

0