Die Lockdatei lässt sich durch
den Benutzer, der das Dokument nicht geöffnet hat, verändern und löschen. Also fällt
dieser Weg der Prüfung weg.
Was soll dieserart Einwurf (="Also")? Der Benutzer der das Dokument nicht geöffnet hat ist doch der Benutzer der feststellen will ob es ein Anderer geöffnet hat - WARUM sollte er sich dabei selbst ein Bein stellen indem er eine dafür relevante Info selbst zerstört?
Ansonsten finde ich die gesamte Frage aber interessant, jedoch kann ich darauf nur antworten das die Information ob eine Datei geöffnet ist auch auf Ebene des Betriebssystems existiert, ich aber leider garnicht genau weiß wo.
Ich würde nach entsprechenden Infos dort suchen wo es um Sicherheit von portabler Software gibt, denn es gibt Seiten die sich damit beschäftigen welche Spuren Du auf einem Windows-PC hinterlässt wenn Du dort ein Portables Office benutzt.
Die Lockdatei ist gelöscht,
nur wo ist jetzt die Information gespeichert, wer das Dokument im Zugriff hat?
Auf Ebene LO muss es Infos zur Autowiederstellung geben WENN diese eingeschaltet ist, also auch nicht immer.
Ein universeller Wag schiene mir zu sein (ich habe das gerade nur sehr kurz getestet) die Datei per Makro zu öffnen, dabei sollte LO per Default eine schreibgeschützte Version der Datei öffnen/erzeugen und man kann diuesen Zustand abfragen.
Leider ist auch das nicht 100%ig sicher denn es kann ja Dateien geben bei denen absichtlich das Schreibschutzattribut (nicht auf Betriebssystemebene sondern im XML der Datei) gesetzt ist, z.B. bei Formularen ist das per Default so.
Ich würde aber einmal prüfen wie eine so geöffnet Datei reagiert wenn man per Basic Änderungen zu machen versucht, eine absichtlich schreibgeschützte Datei sollte ein Entfeernen des Schreibschutzes erlauben eine nur temporär geschützte Datei (weil anderweitig geöffnet) nicht. Ich weiß aber nicht wie die konkrete REaktion/Fehlermeldung in diesem Falle ausfällt.
ein kurzer Test mit:
Code: Alles auswählen
url=converttourl("D:\test.odt")
dim myFileProp() as new com.sun.star.beans.PropertyValue
oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
cur = oDocument.Text.CreateTextCursor
cur.String = "abc"
oDocument.Store
liefert mir bei einer Datei die durch einen anderen Benutzer geöffnet ist bei oDocument.Store eine Fehlermeldung, sonst nicht.
mithin wäre eine LÖsung:
Code: Alles auswählen
Sub test()
url=converttourl("D:\test.odt")
dim myFileProp() as new com.sun.star.beans.PropertyValue
oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
cur = oDocument.Text.CreateTextCursor
cur.String = "abc"
On Error goto fehler
oDocument.Store
Exit Sub
fehler:
Msgbox "Datei ist in Benutzung"
End Sub
(in Realität würde man natürlich nicht zwecks Prüfung Text ändern, sondern z.B. reine der Eigenschaften unter Datei-Eigenschaften per Basic ändern)
Gruß
Stephan