Hallo,
Ich habe folgende Aufgabenstellung:
Ein Programm öffnet mittels LSOpenCFURLRef eine Datei (zB .odt). Es soll anschließend feststellen, wann die Datei wieder geschlossen wurde.
Ich verwende wie bereits beschrieben die Funktion LSOpenCFURLRef von Carbon um die zur Dateiendung gehörige Anwendung zu starten. Das funktioniert auch problemlos.
Wenn beispielsweise eine Datei mit OpenOffice gestartet wird, legt OO eine Lockdatei dazu an. Daran erkenne ich ob die Datei noch geöffnet ist.
Wenn aber eine .txt-Datei geöffnet wird, startet dazu TextEdit, das weder eine Lockdatei anlegt, noch das Filehandle offen hält. Dann könnte ich wenigstens mit lsof nachsehen ob die Datei noch geöffnet ist.
Das Programm soll ebenfalls unter Windows und Linux laufen. Auf den anderen Platformen missbrauche ich dazu als workaround (zB für Notepad oder Gedit) den WindowTitle. Gedit zeigt im WindowTitle wenn die Datei /tmp/test.txt geöffnet wurde "test.txt (/tmp) - gedit". So lange ich diesen WindowTitle finde weiß ich, dass die Datei noch offen ist.
Mein Problem ist jetzt folgendes:
Unter Mac OS X bzw. Carbon finde ich keine Funktion die mir eine Liste aller Fenster zurückgibt, aus denen ich dann den WindowTitle herauslesen kann. Unter Linux habe ich dazu XQueryTree (aus X11) und unter Window gibt es EnumWindows.
Ich habe anfangs die Funktion GetnextWindowOfClass probiert, bis ich festgestellt habe, dass sie nur die Windows der eigenen Applikation zurückgibt.
Kennt jemand eine ähnliche Möglichkeit wie zB EnumWindows unter Windows um eine Liste aller Fenster zu bekommen oder gibt es für Mac OS X eine bessere Möglichkeit festzustellen ob eine Datei noch offen ist?
TextEdit - nehme ich an - hat wie alle diese spartanischen Editoren (zB Notepad), das Problem, dass die Datei nur anfangs einmal in den Speicher geladen und dann sofort wieder geschlossen wird.
Vielen Dank im Voraus,
Michael
Ich habe folgende Aufgabenstellung:
Ein Programm öffnet mittels LSOpenCFURLRef eine Datei (zB .odt). Es soll anschließend feststellen, wann die Datei wieder geschlossen wurde.
Ich verwende wie bereits beschrieben die Funktion LSOpenCFURLRef von Carbon um die zur Dateiendung gehörige Anwendung zu starten. Das funktioniert auch problemlos.
Wenn beispielsweise eine Datei mit OpenOffice gestartet wird, legt OO eine Lockdatei dazu an. Daran erkenne ich ob die Datei noch geöffnet ist.
Wenn aber eine .txt-Datei geöffnet wird, startet dazu TextEdit, das weder eine Lockdatei anlegt, noch das Filehandle offen hält. Dann könnte ich wenigstens mit lsof nachsehen ob die Datei noch geöffnet ist.
Das Programm soll ebenfalls unter Windows und Linux laufen. Auf den anderen Platformen missbrauche ich dazu als workaround (zB für Notepad oder Gedit) den WindowTitle. Gedit zeigt im WindowTitle wenn die Datei /tmp/test.txt geöffnet wurde "test.txt (/tmp) - gedit". So lange ich diesen WindowTitle finde weiß ich, dass die Datei noch offen ist.
Mein Problem ist jetzt folgendes:
Unter Mac OS X bzw. Carbon finde ich keine Funktion die mir eine Liste aller Fenster zurückgibt, aus denen ich dann den WindowTitle herauslesen kann. Unter Linux habe ich dazu XQueryTree (aus X11) und unter Window gibt es EnumWindows.
Ich habe anfangs die Funktion GetnextWindowOfClass probiert, bis ich festgestellt habe, dass sie nur die Windows der eigenen Applikation zurückgibt.
Kennt jemand eine ähnliche Möglichkeit wie zB EnumWindows unter Windows um eine Liste aller Fenster zu bekommen oder gibt es für Mac OS X eine bessere Möglichkeit festzustellen ob eine Datei noch offen ist?
TextEdit - nehme ich an - hat wie alle diese spartanischen Editoren (zB Notepad), das Problem, dass die Datei nur anfangs einmal in den Speicher geladen und dann sofort wieder geschlossen wird.
Vielen Dank im Voraus,
Michael