Laden...

Fremdes Text-Bearbeitungs-Programm starten und Speicher-Event abfangen

Erstellt von Palladin007 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.191 Views
Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 11 Jahren
Fremdes Text-Bearbeitungs-Programm starten und Speicher-Event abfangen

Moin

Ich brauche eine Oberfläche zur Text-Bearbeitung in einem Programm, die auch komplexere Dinge, wie z.B. Tabellen erlaubt.
Das ganze komplett neu zu programmieren finde ich ehrlich gesagt ziemlich unsinnig, daher wollte ich dem Nutzer anbieten, welches Programm er verwenden möchte. Das wird dann geöffnet und es kann beliebig damit gearbeitet werden.

Ich werde versuchen, es so zu gestalten, dass der Computer nach vorhandenen Text-Bearbeitungs-Programmen, mit denen mein Programm umgehen kann, durchsucht und eine Liste dem Nutzer gezeigt wird. Der kann sich dann ein Programm auswählen.

Was ich allerdings daran ändern möchte, ist folgendes:
Wenn die Datei gespeichert wird, dann soll nicht wie üblich nach dem Speicher-Ort gefragt und dann dort gespeichert werden, sondern mein Programm soll die Datei automatisch in einem vorgegebenen Ordner ablegen oder gleich weiter verarbeiten.
Auf diese Weise umgehe ich es, selber eine eigene und umfangreiche Text-Bearbeitungs-Oberfläche zu programmieren, die deutlich ausgereifteren Programmen sowieso nicht das Wasser reichen kann.

Vorerst würde es mir reichen, wenn das mit 97-2003-Dokumenten funktioniert, später würde ich dann auch noch neuere Versionen von Word ermöglichen und auch Programme, wie z.B. Works einbauen.

Kann mir jemand sagen, wie ich das realisieren kann?

Gruß

16.806 Beiträge seit 2008
vor 11 Jahren

Du willst, dass der Anwender über Dein Tool Excel startet (Step 1), dieses nutzt, um eine Datei zu bearbeiten (2), und beim Speicher-Vorgang soll Dein Programm das Speichern abfangen (3)? 🤔

Kann mir jemand sagen, wie ich das realisieren kann?

"Mal eben realisieren" sicherlich nicht. Wenn Du Excel hier irgendwie beeinflussen kannst, dann über ein Addin - dafür gibts auch Events wie "OnBeforeSave" oder so ähnlich.
Aber sicherlich nicht (so mal eben) durch einen anderen Prozess.
Dafür gibt es keine fertige Routine oder Events. Das geht schon in Richtung Software-Hacking.

5.657 Beiträge seit 2006
vor 11 Jahren

Hallo allerseits,

also unmöglich ist das sicher nicht. Ich kenne eine solche Funktionalität von SharePoint oder Quicken. Die Dateien werden in dem definierten Standard-Programm für das Dateiformat geöffnet. Wenn die Datei gespeichert wird, dann wird diese automatisch in der dahinterliegenden Datenbank aktualisiert. Man kann natürlich nicht den Speichervorgang als solches verändern (außer vielleicht mit einem Add-In), aber man kann mit einem FileSystemWatcher darüber benachrichtigt werden, wenn die Datei verändert wurde.

So kann man zumindest Dateien aus einem C#-Programm heraus öffnen, und dann auf das Speichern reagieren. Neu angelegte Dateien müßten aber trotzdem per Hand hinzugefügt werden.

Christian

Weeks of programming can save you hours of planning

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Palladin007,

Kann mir jemand sagen, wie ich das realisieren kann?

welchen der vielen Schritte, die du beschrieben hast, meinst du? Wo genau hängst du?

Eine Datei in ein Temp-Verzeichnis zu speichern und eine andere Anwendung per Process.Start mit dieser Datei als Parameter zu starten, sollte ja nicht das Problem sein. Selbst das Prüfen, wann der fremde Prozess beendet wurde, geht ja nicht Process.Exited einfach. Also was ist dein Problem?

herbivore

5.657 Beiträge seit 2006
vor 11 Jahren

das Prüfen, wann der fremde Prozess beendet wurde, geht ja nicht Process.Exited einfach.

Das wäre natürlich noch einfacher. Allerdings wird man dabei erst benachrichtig, wenn das (Textverabeitungs-)Programm wirklich geschlossen wird. Es gibt auch FTP-Programme, die bei jedem Speichern die geänderte Datei direkt auf den FTP-Server übertragen, ohne das Programm vorher zu schließen. Das ist sehr nützlich, wenn man mit mehreren Dokumenten arbeitet. Dieses Verhalten läßt sich am besten über den FileSystemWatcher realisieren.

Christian

Weeks of programming can save you hours of planning

194 Beiträge seit 2006
vor 11 Jahren

Hallo Paladin007
Wenn es MS-Office ist, kannst du evtl. mit der ROT (Running Object Table) etwas anstellen. Hierbei ist es möglich lafaunde Prozesse via COM anzusprechen, wenn sie COM-Interop unterstützen.
such mal bei G nach c# running object table example".

Für andere Programme, z.Bsp. Works usw. könnte es schwieriger werden, dann ist wie schon beschrieben eine Lösung via FileSystemWatcher oder so machbar.

Gruss

16.806 Beiträge seit 2008
vor 11 Jahren

Es gibt auch FTP-Programme, die bei jedem Speichern die geänderte Datei direkt auf den FTP-Server übertragen, ohne das Programm vorher zu schließen.

Diese legen die Datei aber eigenständig in ein Temp-Verzeichnis, überwachen dann ein File-Change und reagieren darauf.
Funktioniert aber nachvollziehbar nicht mehr, wenn man über Save As den Speicherort ändert. Siehe FileZilla (Open Source).

Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 11 Jahren

Ok, wenn ich mir das so durchlesen, hab ich das Gefühl, dass die Idee nicht ganz passend ist.
Im Endeffekt mache ich alles nur kompliziert.

Ich erkläre einfach mal, wozu ich das brauche:
Und zwar soll der Nutzer die Möglichkeit haben, Text, Bilder, Tabellen, etc. beliebig zu erstellen und anschließend abzuspeichern. Text und ein paar Formatierungen sind nicht weiter wild, eine Oberfläche zu erstellen, die aber umfangreich genug ist, dass sie den meisten Anforderungen genügt, wird dann aber schwieriger.

Ich habe also nach einer Möglichkeit gesucht, relativ einfach eine Oberfläche zur Dokument-Bearbeitung zur Verfügung zu stellen, mit der der Nutzer sich auch gleich zurecht finden kann.
Und was liegt da näher, als ein Programm, was sowieso jeder kennt?
Weshalb ich mehrere Anwendungen mit einbauen wollte, hat den Grund, dass nicht auf jedem Rechner Office installiert ist.

Deshalb wollte ich ein fremdes Programm "missbrauchen", dass es mir eine Oberfläche bereit stellt und ich im Programm anschließend das Ergebnis verarbeite.

Oder gibt es bereits eine Anwendung oder eine Bibliothek, die etwas ähnliches bereit stellt?

194 Beiträge seit 2006
vor 11 Jahren

Kommt darauf an, ob dir z.Bsp. Tx Control Express reicht.

Gruss

Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 11 Jahren

Das sieht auf jeden Fall viel versprechend aus. Danke für den Tipp, ich werde es mir mal anschauen. ^^

16.806 Beiträge seit 2008
vor 11 Jahren

Ribbons dürfen aber nicht für Textverarbeitungs(-ähnliche)-Anwendungen mit kommerziellem Hintergrund verwendet werden.
Das steht in der Microsoft-Lizenz und ist _IIRC _unabhängig davon, ob das nun das .NET Ribbon ist oder ein identisches von einem Drittanbieter.

Müsste man sich anschauen: Office UI licensing for developers
Use Microsoft Foundation Classes (MFC) Ribbon, build it yourself, or use a
third-party component: All of the options in this category require acceptance of the Office UI License terms on this site.

194 Beiträge seit 2006
vor 11 Jahren

Ribbons dürfen aber nicht für Textverarbeitungs(-ähnliche)-Anwendungen mit kommerziellem Hintergrund verwendet werden.

Ok kann sein, habe noch nie ein Ribbon benutzt. Und ich gebe es zu, ich habe auch noch nie dieses Control verwendet.

EDIT: Kann man anscheinend auch im XP-Mode verwenden. Also ohne Ribbon.
Gruss

Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 11 Jahren

Ribbons dürfen aber nicht für Textverarbeitungs(-ähnliche)-Anwendungen mit kommerziellem Hintergrund verwendet werden.

Das ist nicht weiter ein Problem.
Das Programm ist mehr für mich, oder wenn jemand fragt auch für Freunde.
Auch die Text-Verarbeitung ist nur ein Teilbereich, einfach um die Möglichkeit zu bieten, Informationen, die gespeichert und verwaltet werden, ansprechend und übersichtlich in einer Datei darstellen zu können.
Und kommerziell wird das definitiv nicht 😄

Aber es gefällt mir gut, danke für den Tipp ^^