|
» myCSharp.de Diskussionsforum |
|
|
|
Autor
 |
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
|
|
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?
|
|
03.03.2019 21:39
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Palladin007
myCSharp.de-Mitglied
Dabei seit: 03.02.2012
Beiträge: 1.209
Entwicklungsumgebung: Visual Studio 2017 Herkunft: NRW
|
|
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Palladin007 am 04.03.2019 11:02.
|
|
04.03.2019 09:02
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von marlem am 04.03.2019 11:11.
|
|
04.03.2019 11:06
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Palladin007
myCSharp.de-Mitglied
Dabei seit: 03.02.2012
Beiträge: 1.209
Entwicklungsumgebung: Visual Studio 2017 Herkunft: NRW
|
|
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.
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Palladin007 am 04.03.2019 11:39.
|
|
04.03.2019 11:33
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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
|
|
04.03.2019 12:42
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Abt
myCSharp.de-Team
Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm
|
|
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...).
|
|
04.03.2019 12:50
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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
|
|
04.03.2019 12:57
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Abt
myCSharp.de-Team
Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm
|
|
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.
|
|
04.03.2019 13:06
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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 ? :)
|
|
04.03.2019 13:12
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
@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-applica...ine-parameters/
LG
Edit:
Abgesehen von der Großschreibung könnte man deinen Beispielcode übrigens 1:1 in Windows-Forms und Konsolenanwendungen verwenden ;)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am 04.03.2019 13:25.
|
|
04.03.2019 13:21
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Abt
myCSharp.de-Team
Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm
|
|
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.
|
|
04.03.2019 13:25
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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.
|
|
04.03.2019 13:38
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von marlem am 04.03.2019 13:53.
|
|
04.03.2019 13:51
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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
|
|
04.03.2019 14:05
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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?
|
|
04.03.2019 15:30
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am 04.03.2019 15:56.
|
|
04.03.2019 15:55
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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!
|
|
04.03.2019 16:14
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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 ;-)
|
|
04.03.2019 16:25
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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");
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?
|
|
04.03.2019 16:37
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von marlem am 04.03.2019 16:42.
|
|
04.03.2019 16:40
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Abt
myCSharp.de-Team
Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm
|
|
Liest Du Deinen eigenen Code durch?
Du hast doch selbst die Message Box in Deinen Code gebracht.
|
|
04.03.2019 16:54
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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-applica...ine-parameters/
gibt es eine Methode OpenFile . Die gibt es aber bei mir nicht.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von marlem am 04.03.2019 17:16.
|
|
04.03.2019 17:02
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am 04.03.2019 17:24.
|
|
04.03.2019 17:23
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
marlem
myCSharp.de-Mitglied
Dabei seit: 01.08.2018
Beiträge: 66
Entwicklungsumgebung: Visual Studio Community 2017 Herkunft: Reutlingen
Themenstarter
|
|
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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von marlem am 04.03.2019 17:34.
|
|
04.03.2019 17:29
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
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?
|
|
05.03.2019 07:34
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Abt
myCSharp.de-Team
Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm
|
|
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
|
|
05.03.2019 23:33
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
|