Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Hook für openOffice (https://www.delphipraxis.net/160668-hook-fuer-openoffice.html)

Schwedenbitter 25. Mai 2011 13:45

Hook für openOffice
 
Hallo,

ein Problem lässt mich seit ewigen Zeiten nicht in Ruhe (nur auszugsweise: 2009/1, 2009/2, 2010). Im Grunde geht es immer um ein und dieselbe Sache, wo ich mit diversen Ansätzen immer noch nicht weiter bin:

Ich habe eine Server-Client-Anwendung. Der Server sagt dem Client, welche Dateien (vornehmlich openOffice) er öffnen soll. Weiter ist ein langsames VPN gegeben.
Mein Ziel ist es nachwievor, dass mein Programm die Datein vom Server auf den lokalen Rechner kopiert, was relativ schnell geht. Dass mein Programm diese openOffice öffnen lässt und nach dem Bearbeiten/Speichern wieder an Ort und Stelle zurückschreibt. Mein Problem war und ist insoweit festzustellen, ob openOffice fertig ist. Ich habe bereits mit Threads experimentiert und festgestellt, dass openOffice allein beim Laden die Datei mehrfach locked und wieder freigibt. Und über das Fensterhandle komme ich auch nicht weiter, weil openOffice als MDI konzipiert ist.

Ich habe nie so recht verstanden was hooken eigentlich bedeutet, bis ich heute nun mal im web nachgelesen habe. Das wiederum bringt mich auf die Idee, die Dateisystemfunktionen zu hooken und so festzustellen, ob/wann openOffice eine Datei öffnet, schreibt etc., um evtl. so meine "Aufgabe" endlich sicher zu lösen.
Ich habe nämlich zusätzlich das Problem, dass openOffice bzw. dessen DDEServer regelmäßig abstürzt und meine bisherigen Ansätze damit stest Probleme hatten...

Hat jemand damit - insbesondere mit openOffice - schon Erfahrungen gemacht?

Gruß, Alex

Elexarie 25. Mai 2011 14:18

AW: Hook für openOffice
 
Das Thema "Hook" - "Injecting" etc. ist wirklich schön, aber bedarf einer Menge vorarbeit. Debugging, Disassembly etc. pp.

Du musst das fertige Programm auseinander nehmen. IDA Pro Advance und OllyDbg kann ich dir empfehlen.

ChrisE 25. Mai 2011 15:29

AW: Hook für openOffice
 
Hi Alex,

ich weiß nicht inwieweit es dich weiter bringt, aber OpenOffice erstellt doch beim öffnen einer Datei im Dateisystem eine Lock-Datei. Wäre es nicht eine Möglichkeit, darauf zu "warten", dass diese wieder gelöscht wird - was üblicherweise der Fall ist, wenn das Dokument geschlossen wird.

Gruß, Chris

sHoXx 25. Mai 2011 15:39

AW: Hook für openOffice
 
so wie ich das verstanden hab soll gewartet werden, bis openoffice die datei fertig geladen hat, sonst könnte man auch einfach schauen ob der prozess beendet wurde.

himitsu 25. Mai 2011 15:49

AW: Hook für openOffice
 
Tut OpenOffice nicht eine API bereitstellen?
Über diese API könnte man ein Plugin in OO einschleußen, welches einem die nötigen Infos mitteilt, indem es auf die entsprechenden Ereignisse (Datei öffnen/speichern/schließen und eventuell noch OO beenden) reagiert und diese weiterleitet.

Schwedenbitter 25. Mai 2011 18:11

AW: Hook für openOffice
 
Danke für Eure Antworten!

Zitat:

Zitat von ChrisE (Beitrag 1102876)
... aber OpenOffice erstellt doch beim öffnen einer Datei im Dateisystem eine Lock-Datei. Wäre es nicht eine Möglichkeit, darauf zu "warten", dass diese wieder gelöscht wird - was üblicherweise der Fall ist, wenn das Dokument geschlossen wird.

Die Datei hatte ich bemerkt; wohl mir fehlte die Idee, auch daraus einen Ansatz zu machen. Hört sich gut an und ich werde es mal ausprobieren.
Zitat:

Zitat von himitsu (Beitrag 1102881)
Tut OpenOffice nicht eine API bereitstellen?

Auch das scheint ein Ansatz zu sein. Da muss ich mich mal belesen. Es wäre zu schön, wenn man es damit machen könnte...

Der Programmablauf nur nochmal zur Erklärung:
Delphi-Quellcode:
1. Benutzer möchte Datei laden.
2. Server -> Client (hinter lahmem VPN!) lade Datei!
3. Client = kopiert Datei ins Temp-Verzeichnis
4. Client = lässt OOO-Datei öffnen
5. Client = wartet, bis Datei wieder geschlossen wurde //<- hier habe ich die meisten Probleme
6. Client = kopiert/verschiebt Datei wieder zurück auf den Server (hinter dem VPN)
Das Problem sind die abartig langen Wartezeiten, wenn OOO eine Datei übers VPN laden muss. Auch wenn die nur 20 KB groß ist und das VPN einen Durchsatz in beide Richtungen von 100 KB/S (bereits netto) schaffte mit Ping-Zeiten um die 25 ms, dauert das Laden teilweise bis zu 1 min :( Und dann bricht manchmal auch die Verbindung ab -> defekte lock-Datei, nicht aktuelle Datei ...
Deshalb der ganze Aufwand, um den Flaschenhals VPN zu entschärfen!

Ich hatte es bereits über Prozesse, Prozess-ID, testen ob die Datei exklusiv zu öffnen geht etc. probiert. Aber so wirklich sicher klappte das nie.
Das mit der Lock-Datei liegt sowas von auf der Hand, dass mir das nie aufgefallen ist (Wald vor lauter Bäumen und so).

Gruß, Alex

Teekeks 25. Mai 2011 22:39

AW: Hook für openOffice
 
Nun:
Mal ein Einwurf.
Wie wäre es wenn du einfach wartest bis OpenOffice nicht mehr als Prozess vorhanden ist?
Unter Linux nutze ich folgendes Script dafür:
Code:
#!/bin/sh
SERVICE='soffice.bin'
#start service:
soffice $@
#wait for close:
while ps ax | grep -v grep | grep $SERVICE > /dev/null
do
  sleep 1
done

Schwedenbitter 25. Mai 2011 23:50

AW: Hook für openOffice
 
Zitat:

Zitat von Teekeks (Beitrag 1102948)
Nun:
Mal ein Einwurf.
Wie wäre es wenn du einfach wartest bis OpenOffice nicht mehr als Prozess vorhanden ist?

So einfach ist es dann leider nicht.
Ich hatte auch das schon probiert. Das Problem ist aber, dass die Benutzer mehrere Dateien öffnen können sollen/müssen. Zumindest unter Windows ist es so, dass im Schnitt für jede Datei je ein Prozess für soffice.exe und soffice.bin existieren. Mag sein, dass ich mich irre, aber es ist ja auch schon spät. Ich nutze auch Linux, ob dies dort auch so ist mit den Prozessen, weiß ich aber nicht.
Wie soll ich wissen, welcher Prozess meine Datei(en) geöffnet hält?

Gruß, Alex

sHoXx 26. Mai 2011 15:49

AW: Hook für openOffice
 
anhand der PID, ich hab letztens ne funktion gemacht, die dir den prozess startet und die pid zurückgibt, und ne funktion die angibt, ob der prozess noch läuft oder beendet wurde. wenn du willst kann ich dir die zukommen lassen, aber erst nächste woche da ich gleich feierabend mach und morgen schule hab :)

Schwedenbitter 26. Mai 2011 18:52

AW: Hook für openOffice
 
Zitat:

Zitat von sHoXx (Beitrag 1103072)
anhand der PID, ich hab letztens ne funktion gemacht, die dir den prozess startet und die pid zurückgibt, und ne funktion die angibt, ob der prozess noch läuft oder beendet wurde. wenn du willst kann ich dir die zukommen lassen, aber erst nächste woche da ich gleich feierabend mach und morgen schule hab :)

Das wäre sehr nett!
Ich meine aber, dass ich das schon einmal probiert hatte. Soweit ich mich erinnern kann, gabe es aber das Problem, dass openOffice zwar mehrere Dateien geöffnet hatte, es aber letztlich nur eine PID (Heißt das unter Windows auch so?) gab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz