myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Grundlagen von C# (https://www.mycsharp.de/wbb2/board.php?boardid=88)
--- Wie kann ich eine Textdateien nach Doppelklick mit meinem eigenen Editor öffnen? (https://www.mycsharp.de/wbb2/thread.php?threadid=121646)


Geschrieben von marlem am 03.03.2019 um 21:39:
  Wie kann ich eine Textdateien nach Doppelklick mit meinem eigenen Editor öffnen?
Hallo,

ich entwickle einen barrierefreien Texteditor mit WPF.
Ich möchte dass der Anwender im Windows dafür sorgen kann,dass wenn er auf eine Textdatei einen Doppelklick macht, dass die Textdatei mit meinen barrierefreien Texteditor geöffnet wird.

Was muss ich tun, damit das funktioniert?


Geschrieben von Abt am 03.03.2019 um 22:29:
 
Hat mit WPF oder einer Anwendung selbst nichts am Hut.

Du musst in Windows die Dateiendung mit der Applikation verknüpfen.
Siehe auch  Google-Suche nach windows set default application for file type, das dann zB auf  Ändern der Standardprogramme in Windows 10 verweist.

Willst Du das programatisch tun, geht das über das aktive Setzen eines entsprechenden Registry Keys.


Geschrieben von marlem am 04.03.2019 um 05:33:
 
Hallo Abt,

okay, habe ich mir fast gedacht, dass es eine C#-Sache ist.
Ja, ich möchte das im Programm machen.
Wenn mein Texteditor auf einen Windowsrechner gestartet wird,
soll der Anwender die Möglichkeit haben den Texteditor mit Textdateien zu verknüpfen.

Hast Du Beispielcode wie das geht?


Geschrieben von Palladin007 am 04.03.2019 um 09:02:
 
Nimmst Du die Suche von Abt, hängst "C#" davor und wirst fündig

 Google-Suche nach "C# windows set default application for file type"

Das wiederum führt zu:

 Stackoverflow: How to make a C# Application work as the default program for certain files?


Geschrieben von marlem am 04.03.2019 um 09:17:
 
okay, dann habe ich nach den falschen Begriffen gegoogelt. sorry!


Geschrieben von marlem am 04.03.2019 um 11:06:
 
Ich habe nun diese Methode erstellt:

C#-Code:
private void StandardProgrammfuerTextdateien()
        {
            RegistryKey vRegist;
            RegistryKey vKey;
            vRegist = Registry.ClassesRoot.OpenSubKey("", true);
            vKey = vRegist.CreateSubKey(".txt");
            vKey.SetValue("", "textdatei");
            vKey = vRegist.CreateSubKey("textdatei");
            vKey.SetValue("", "Textdatei");
            vKey = vRegist.CreateSubKey(@"textdatei\DefaultIcon");
            vKey.SetValue("", System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + ".0");
            vKey = vRegist.CreateSubKey(@"textdatei\shell\open\command");
            vKey.SetValue("", System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "%1");
        }

Wenn ich die im Konstruktor vom Hauptformular aufrufe, dann knallt es!
Wo muss ich die aufrufen?


Geschrieben von Palladin007 am 04.03.2019 um 11:33:
 
Zitat:
dann knallt es!

Das ist keine Fehlermeldung


Tipp:
Guck dir Mal an, welche Registry-Einträge Du tatsächlich änderst bzw. setzt ...


Tipp Nr. 2:
Ich würde an deiner Stelle im RegEdit einen vorhandenen Eintrag anschauen, da gibt's bestimmt schon was für Text-Dateien, was dann eben auf die notepad.exe verweist.


Geschrieben von MrSparkle am 04.03.2019 um 11:44:
 
Bitte beachte  [Hinweis] Wie poste ich richtig?, besonders Punkt 5, sonst kann man dir nicht helfen.

Verwende den Debugger, dann merkst du schnell, wo das Problem liegt:  [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Der Konstruktor einer Form ist allerdings auch die denkbar schlechteste Stelle, um die Registriy zu manipulieren. Evtl. würde sogar eine einfache .reg-Datei ausreichen:  Windows Registry#.REG_files


Geschrieben von Palladin007 am 04.03.2019 um 12:39:
 
Ergänzend dazu:

Wenn es unbedingt aus dem Programm heraus geschehen soll, dann leg die REG-Datei als Ressource ab und führe die regedit.exe damit aus:

 https://www.codeproject.com/Questions/873519/how-to-execute-reg-file-from-Csharp-application

Beachte aber, dass das Admin-Rechte braucht, allerdings müsste Windows dann automatisch danach fragen.


Geschrieben von Taipi88 am 04.03.2019 um 12:42:
 
Hi,

noch als Anmerkung:
Eine solche Programmfunktion ist in meinen Augen etwas, das ausschließlich einem Installer beigebracht werden sollte.

Ansonsten hinterlässt du Müll wenn dein Programm entfernt wird...

LG


Geschrieben von Abt am 04.03.2019 um 12:50:
 
Taipi88, Müll entsteht dabei nicht.
Denn wenn Windows versucht eine Applikation zu starten, die es nicht mehr gibt, dann kommt der Dialog wie man die Datei denn öffnen mag - als ob keine Applikation hinterlegt ist.

Zudem ist das sogar ein übliches Vorgehen, dass Applikationen sich die Verantwortung einer Dateiendung erfragen (Chrome, PDF, Word, Bilder...).


Geschrieben von Taipi88 am 04.03.2019 um 12:57:
 
Abt,
nach Löschung des Programms verbleiben dabei Registry-Einträge die ab diesem Zeitpunkt als Müll zu betrachten sind - es sei denn Windows würde das aufräumen - was ich allerdings bezweifle.

Wenn das im Programm selbst gemacht wird - hat man ja quasi keine Chance mehr aufzuräumen - im Installer allerdings durchaus.

LG


Geschrieben von Abt am 04.03.2019 um 13:06:
 
Probier's halt selbst aus.. wenn es nur die Registry der Dateiendung ist, dann bleibt da keine Leiche...
Und wie gesagt: genau so registrieren sich auch die meistgenutzten Windows Anwendungen dieser Erde.

Bei anderen Registry Zeugs bin ich bei Dir.... in diesem Fall aber nicht.


Geschrieben von marlem am 04.03.2019 um 13:12:
 
Es ist schön, dass ich euch auch OHNE mich gut unterhaltet, aber passt auf :)

In Java geht es ganz einfach so:

Code:
1:
2:
3:
public static void main(String[] arguments) {
		if (arguments.length == 1) {
			startUpPath = arguments[0];

und in einer Windows-Programmiersprache soll es gar nicht gehen ? :)


Geschrieben von Taipi88 am 04.03.2019 um 13:21:
 
@marlem:
Für eine solche Antwort hättest du deine Frage deutlicher formulieren müssen.

Keiner hier hat erwartet, dass du in der Lage bist einen barrierefreien Texteditor zu basteln - jedoch noch nie die Argumente einer Anwendung beim Programmstart benötigt hast...
(Zugegeben - bei WPF geht's ein wenig anders...)

Der Link zum richtigen Tutorial:  https://www.wpf-tutorial.com/wpf-application/command-line-parameters/

LG

Edit:
Abgesehen von der Großschreibung könnte man deinen Beispielcode übrigens 1:1 in Windows-Forms und Konsolenanwendungen verwenden ;)


Geschrieben von Abt am 04.03.2019 um 13:25:
 
marlem, auch in Java registriert man mit diesem gezeigten Code keine Applikation in Windows.
Und genau das ist jedoch die Frage in Deinem Startpost.

Was Du da zeigst ist nur die Applikationsseite zur Annahme von Startparametern.
Aber auch das hat mit WPF genau nichts zutun - daher verschiebe ich das nun mal entsprechend in den Grundlagen Bereich.


Geschrieben von marlem am 04.03.2019 um 13:30:
 
@Taipi88
Ich habe nur gezeigt wie es mit Java geht.

In einem Kochbuch für C# gibt es ein Kapitel "Eine Dateiverknüpfung erzeugen".
Die machen es in der Registry.
Leider ist das Beispiel schlecht kommentiert!


Geschrieben von MrSparkle am 04.03.2019 um 13:38:
 
Eine Dateiverknüpfung zu erzeugen, hat weder was mit dem Standardprogramm aus deiner originalen Frage zu tun, noch mit dem Programm-Argumenten aus deinem Codebeispiel.

Erkläre doch mal bitte, was genau du vor hast, und an welcher Stelle du damit nicht weiterkommst.


Geschrieben von marlem am 04.03.2019 um 13:51:
 
Also:
ich entwickle einen barrierefreien Texteditor mit Microsoft Dotnet WPF.
der kommt auf meine Webseite zum kostenlosen Download.

Wenn jemand den heruntergeladen hat und sagt, der Texteditor ist so toll mit dem möchte in Zukunft ALLE Textdateien bearbeiten, dann soll dieser Anwender die Möglichkeit haben diesen Texteditor mit Textdateien zu verknüpfen und in Zukunft muss er nur auf eine Textdatei einen Doppelklick machen und der barrierefreie Texteditor öffnet sich samt Textdatei.

welche Schritte sind notwendig, damit das funktioniert?


Geschrieben von MrSparkle am 04.03.2019 um 14:05:
 
1. Windows per Registry sagen, daß deine App das Standardprogramm für die Endung .txt sein soll
2. In deinem Programm die Text-Datei im ersten Programm-Argument öffnen, wenn das übergeben wird


Geschrieben von marlem am 04.03.2019 um 15:30:
 
Anwendung starten mit Parameter habe ich folgendes probiert:
In der Datei App.xaml.cs habe ich das eingetragen:

XML-Code:
private void Application_Startup(object sender, StartupEventArgs e)
        {
            MainWindow wnd = new MainWindow();
            // The OpenFile() method is just an example of what you could do with the
            // parameter. The method should be declared on your MainWindow class, where
            // you could use a range of methods to process the passed file path
            if (e.Args.Length == 1)
                MessageBox.Show("Now opening file: \n\n" + e.Args[0]);
            wnd.Show();
        }

in der Datei App.xaml habe ich das hier hinzugefügt:

XML-Code:
<Application x:Class="WPFTexteditor.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WPFTexteditor"
             StartupUri="MainWindow.xaml"
             [B]Startup="Application_Startup"
>[/B]
    <Application.Resources>
        <ResourceDictionary>



        </ResourceDictionary>
    </Application.Resources>
</Application>

In die Projekteigenschaften bei Startoptionen Befehlszeilenargumente steht das drin:

Zitat:
C:\Users\Markus Lemcke\Documents\Einstellungen.txt

Jetzt war ich der Meinung, dass wenn der Texteditor startet, dass die Datei "Einstellungen.txt" geöffnet wird.

Macht er aber nicht.
Warum?


Geschrieben von Taipi88 am 04.03.2019 um 15:55:
 
Hi,

du hast doch überhaupt nichts geschrieben (in deinem Code), dass eine Textdatei geöffnet werden soll... Lediglich eine MessageBox, die sagt, dass du das tust.

Kam diese wenigst?


Geschrieben von marlem am 04.03.2019 um 15:58:
 
Nein, es passiert gar nichts! keine Messagebox!

Ich weiss nicht was ich coden muss, damit die Textdatei geöffnet wird!


Geschrieben von Taipi88 am 04.03.2019 um 16:04:
 
Hi,

ok - der Fehler warum keine MessageBox kam liegt in der App.xaml.cs.

Du definierst aktuell:
a) Einen StartupPath
b) Eine StartupURI

Da die StartupURI Vorrang hat - wird dein StartupPath ignoriert.
-> Entferne die StartupURI

Lesen einer Textdatei:
 https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/file-system/how-to-read-a-text-file-one-line-at-a-time

LG


Geschrieben von marlem am 04.03.2019 um 16:14:
 
Habe ich gemacht:

XML-Code:
<Application x:Class="WPFTexteditor.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WPFTexteditor"
             Startup="Application_Startup"
>
    <Application.Resources>
        <ResourceDictionary>

        </ResourceDictionary>
    </Application.Resources>
</Application>

Hat nichts geholfen! keine Messagebox!


Geschrieben von pinki am 04.03.2019 um 16:22:
 
Funktioniert's mit manuellem Aufruf und Parameterübergabe?


Geschrieben von Taipi88 am 04.03.2019 um 16:25:
 
Hi,

führt er denn die Methode aus? (Debugger benutzen)

Meine nächste Vermutung wäre, dass dein Argument wegen fehlender Anführungszeichen gesplittet wurden und somit deine Überprüfung auf Arguments.Count == 1 scheitert.

LG

PS: Eine Bitte - Benutz doch auch mal einen Punkt - ich fühl mich mit Ausrufezeichen immer angeschrien ;-)


Geschrieben von marlem am 04.03.2019 um 16:33:
 
Zitat von pinki:
Funktioniert's mit manuellem Aufruf und Parameterübergabe?

Wie mache ich eine Manuelle Parameterübergabe? habe ich noch nie gemacht.


Geschrieben von marlem am 04.03.2019 um 16:37:
 
Zitat von Taipi88:
Hi,

führt er denn die Methode aus? (Debugger benutzen)



LG

PS: Eine Bitte - Benutz doch auch mal einen Punkt - ich fühl mich mit Ausrufezeichen immer angeschrien ;-)

Die Methode führt er aus. Das hier funktioniert:

C#-Code:
private void Application_Startup(object sender, StartupEventArgs e)
        {
            MainWindow wnd = new MainWindow();
            MessageBox.Show("Startup");
            // The OpenFile() method is just an example of what you could do with the
            // parameter. The method should be declared on your MainWindow class, where
            // you could use a range of methods to process the passed file path
            if (e.Args.Length == 1)
                MessageBox.Show("Now opening file: \n\n" + e.Args[0]);
            wnd.Show();
        }

Zitat:
Meine nächste Vermutung wäre, dass dein Argument wegen fehlender Anführungszeichen gesplittet wurden und somit deine Überprüfung auf Arguments.Count == 1 scheitert.

Was kann ich dagegen tun?


Geschrieben von marlem am 04.03.2019 um 16:40:
 
Du bist ein Held:

Zitat:
"C:\Users\Markus Lemcke\Documents\Einstellungen.txt"

Mit Anführungszeichen funktioniert es.

Frage:
Was muss ich tun, damit nicht die Message angezeigt wird, sondern der Texteditor mit der angegebenen Datei geöffnet wird?


Geschrieben von Abt am 04.03.2019 um 16:54:
 
Liest Du Deinen eigenen Code durch? verwundert
Du hast doch selbst die Message Box in Deinen Code gebracht.


Geschrieben von marlem am 04.03.2019 um 17:02:
 
Ja, aber die muss doch weg und dann muss ein anderer Code hin, der dafür sorgt, dass der Editor plus Textdatei geöffnet wird.
Was ich jetzt anstelle der Messagebox hinschreiben muss weiß ich nicht.

Hier  https://www.wpf-tutorial.com/wpf-application/command-line-parameters/
gibt es eine Methode OpenFile . Die gibt es aber bei mir nicht.


Geschrieben von Taipi88 am 04.03.2019 um 17:23:
 
Hi,

das Lesen einer Textdatei hatte ich bereits oben verlinkt - ab davon wäre das eine Google-Suche wert. (Wieso Google-Suche? Es gibt viele verschiedene Methoden eine Textdatei zu lesen, am Stück, Zeilenweise, Zeilenweise, ggf. sogar asynchron..., da wirst du dir Gedanken machen müssen, wie du das gerne angehen möchtest bzw. wie groß die von dir unterstützten Textdateien sein dürfen ohne dass dein Programm hängt)

Was den Beispielcode angeht:
Diese Methode wurde dort nicht veröffentlicht und würde dir auch nichts helfen - du willst ja einen barrierefreien Texteditor - keine simple Textbox. Also wirst du da viele Sachen selbst machen müssen.

LG


Geschrieben von MrSparkle am 04.03.2019 um 17:23:
 
Hast du nicht geschrieben, daß du einen barrierefreien Text-Editor geschrieben hast? Dann weißt du doch am besten, wie man damit eine Datei öffnet...


Geschrieben von marlem am 04.03.2019 um 17:29:
 
Zitat von Taipi88:
Hi,

das Lesen einer Textdatei hatte ich bereits oben verlinkt

LG

Ich muss jetzt selber eine Methode schreiben, welche die Datei in die Textbox einliest und der ich die Datei die in args angegeben ist übergeben kann?
Habe ich das richtig verstanden?

okay:

C#-Code:
public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            MainWindow wnd = new MainWindow();

            if (e.Args.Length == 1)
                wnd.edtEditor.Text = File.ReadAllText(e.Args[0], Encoding.Default);
            wnd.Show();
        }
    }

Erledigt. Funktioniert.


Geschrieben von marlem am 04.03.2019 um 17:41:
 
dieser Punkt ist erledigt:

Zitat:
2. In deinem Programm die Text-Datei im ersten Programm-Argument öffnen, wenn das übergeben wird


Geschrieben von Stefan.Haegele am 05.03.2019 um 07:34:
 
Nicht böse gemeint, aber bei dem was ich hier bis jetzt gelesen habe bin ich gespannt was der Editor kann - ich vermute du verwendest ein 3rd Party Conrol.. Aber ich lasse mich gerne überraschen - wann kann man sich den Editor denn mal anschauen?


Geschrieben von marlem am 05.03.2019 um 07:59:
 
Wenn ich das Problem mit Texteditor als Stanardprogramm für Textdaten gelöst habe, kommt er auf die Downloadseite  https://www.marlem-software.de/downloads.html wo bereits mein barrierefreier Texteditor mit JavaFX online ist.


Geschrieben von trashkid2000 am 05.03.2019 um 22:40:
 


Zitat von marlem:
Also:
ich entwickle einen barrierefreien Texteditor mit Microsoft Dotnet WPF.
der kommt auf meine Webseite zum kostenlosen Download.

Auch wirklich nicht böse gemeint, aber ich persönlich bleibe ganz sicher, wenn ich das hier so lese, bei meinem Notepad++ oder Visual Studio Code.

Alle können unheimlich viel, inklusive zig PlugIns.

Und ehrlich gesagt wäre es für mich ein Totschlagkriterium, wenn sich eine Software (und am besten noch ohne Nachfrage) als Standardprogramm registrieren würde !!

Was bedeutet denn barrierefrei eigentlich im Kontext eines Editors?

Marko


Geschrieben von Abt am 05.03.2019 um 23:33:
 


Zitat von trashkid2000:
Was bedeutet denn barrierefrei eigentlich im Kontext eines Editors?

i.d.R:

- Screenreader Support
- DPI Einstellung der Umgebung
- Farben (Kontrast, Farbe bei Sehschwäche..)
- Keyboard-only Input
- Shortcuts (das was man bei den Office Anwendungen sieht, wenn man CTRL drückt; weiß nicht, ob man das als Shortcuts bezeichnet)
- ...

Aber ja, dies alles in in VSCode beachtet worden, wobei VSCode auf die Accessibility von Chrome angwiesen ist
 https://code.visualstudio.com/docs/editor/accessibility


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.11.2019 21:53