Carbon - Liste aller offenen Fenster

B

Bantak

Registriert
Thread Starter
Dabei seit
17.02.2009
Beiträge
2
Reaktionspunkte
0
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
 
AW: Carbon - Liste aller offenen Fenster

Ich bin jetzt bei meinen Nachforschungen auf Applescript gestoßen.
Da kann ich ganz einfach feststellen ob die Datei noch offen ist. Wenn ich zB TextEdit starte würde das so aussehen:
Code:
tell application "TextEdit"
  if (count of (documents whose path contains "/Users/Admin/Documents/test.txt")) > 0 then
    return true
  else
    return false
  end if
end tell

Ein Problem sind dann aber Programme die Applescript nicht unterstützen, wie zB Preview.
Somit fällt diese Lösung auch weg.


Kann man vielleicht mit Cocoa mehr machen? Zur Not muss ich eben das verwenden, auch wenn ich nicht vor hatte Objective-C zu verwenden.
 
Zurück
Oben Unten