[GastForen Programmierung/Entwicklung AppleScript Zeiterfassung für aktives Fenster oder eine geöffnete Datei

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

8. Nov 2006, 19:26
Beitrag # 1 von 28
Bewertung:
(5549 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
bin leider ein absoluter Neuling in Applescript, ich suche ein Script oder einen Ansatz für folgendes Problem:

Ich möchte die Zeit für eine offne Datei erfassen, da ich viel von zu Hause arbeite und die Arbeitszeit bei meinen Chef abrechnen muss, leider immer viele einzelne Dateien (freistellen von Bilder, konvertieren u.s.w.). Oder gibt es vielleicht ein brauchbares Tool für Mac OS X?

Ich Danke euch in voraus
X

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

8. Nov 2006, 20:49
Beitrag # 2 von 28
Beitrag ID: #421295
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

herzlich willkommen im PAGE-Forum! :-)

Ich nehme mal an, dass Du die Dateien mit Photoshop bearbeitest.
Richtig? ;-)

*****
Wir hatten hier schon mal ein Zeiterfassungs-Problem zu lösen
und zwar im Thema "Auftragserfassung per Script"
http://www.page-online.de/page/forum/viewthread/2492/

Doch scheint mir die damals gefundene Lösung nicht geeignet für
Deine Aufgabe.

*****
Ich habe nun hier http://www.versiontracker.com/ im Suchen-Feld
das Wort "timer" eingetippt. Das Ergebnis: 95 Produkte, unter
denen sicher das eine oder das andere geeignet wäre. Wie zum
Beispiel "Project Timer Pro 1.1.2".

*****
Man könnte aber auch versuchen, ein AppleScript nach Mass zu
entwickeln. Hier eine kurze Skizze:
1. Datei öffnen.
2. Ein Sichern-Unter vornehmen.
3. Bearbeiten.
4. Zwischenhinein normal Sichern.
5. Am Schluss ein letztes Sichern.
6. Datei schliessen.

Um dann von den einzelnen Dateien die aufgewendete Zeit zu
erfassen, wählt man sie aus (oder den Ordner, in welchem sie sich
befinden) und zieht sie auf ein als Droplet gesichertes Script.

Dieses Script notiert von jeder Datei den Namen, das Erstellungs-
Datum (deshalb das Sichern-Unter), das Modifikations-Datum.
Dann errechnet es daraus die Zeit und schreibt das Ergebnis in
eine Rapport-Datei.

Das sind so die ersten Gedanken.

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

8. Nov 2006, 21:34
Beitrag # 3 von 28
Beitrag ID: #421296
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
vielen Dank für deine schnelle Antwort. Project Timer und ähnliche Programme habe ich schon getestet, das ist aber nicht das was ich suche, näher kommt da schon dein Script im Thema "Auftragserfassung per Script". Mir gefällt hier das für jede Datei eine txt erzeugt wird in der die Daten stehen. Das Problem ist das es unterschiedliche Daten sind die ich aufbereiten muss (FreeHand, PhotoShop, InDesign, Word) es sind meist Kundendaten für die Druckerei, die natürlich so wenig Arbeit wie möglich (mit den Daten) haben wollen. Deshalb dachte ich an einer Zeiterfassung wie z.B.

tell active window
set counter

oder so, leider habe ich nicht den Durchblick alleine.


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

8. Nov 2006, 22:48
Beitrag # 4 von 28
Beitrag ID: #421297
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

also ... mit einem AppleScript hat man sicher nicht die Möglichkeiten,
welche eine professionelle Timer-Applikation bietet.

Für das Überwachen von offenen Fenstern sehe ich keine Möglichkeit.

Abgesehen vom manuellen Notieren der Zeiten kommt meiner Meinung
nach nur die vorher skizzierte Lösung in Frage. Dazu müsste man aber
konsequent jede Arbeitsperiode mit einem Sichern-Unter und dem
abschliessenden Sichern abgrenzen und die Datei aufs Droplet ziehen,
damit der Eintrag in die Rapport-Datei vorgenommen werden kann.

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

9. Nov 2006, 08:23
Beitrag # 5 von 28
Beitrag ID: #421298
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
vielen Dank für die Antwort, schade das es nicht möglich ist, aber wäre es möglich das andere Script so zu gestalten, das sich die Datei die man auf Droplet zieht gleich öffnet, damit wäre ich schon mehr als zufrieden.

Gruss Crow


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

9. Nov 2006, 09:58
Beitrag # 6 von 28
Beitrag ID: #421299
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

meinst Du mit dem "anderen Script" das Droplet "AuftragErfassung_02d"?

Ja, es sollte möglich sein, die Datei zu öffnen. Aber was sollte gleichzeitig
geschehen? Ein Eintrag in die Log-Datei mit Namen und Art der Datei, und
der Startzeit? Ist auch denkbar.

Dann machst Du den Freisteller. Sicherst. Und beim Schliessen soll die aktuelle
Zeit sowie die Dauer eingetragen werden? Da sehe ich keine Möglichket.

Es müsste wieder die Datei auf das Droplet gezogen werden. Doch wie soll das
Script wissen, ob es die Datei öffnen lassen soll oder "nur" die Abrechnung
in der Log-Datei eintragen?

Gut, es könnte die Aktionen abwechselnd machen. Bedingung wäre aber, dass
der Vorgang für jede Datei komplett ausgeführt würde.

Die ganze Sache steht demnach auf tönernen Füssen. Ich ziehe immer noch die
vorher skizzierte Lösung vor.

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

9. Nov 2006, 18:03
Beitrag # 7 von 28
Beitrag ID: #421300
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
ich verstehe das Problem beim zweiten draufziehen würde open ja wieder gestartet werden, dumm von mir.  Würdest Du mir denn beim Erstellen des Scriptes (dein Vorschlag) zur Seite stehen?

Gruss Crow


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

9. Nov 2006, 20:06
Beitrag # 8 von 28
Beitrag ID: #421301
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

nein, das ist nicht dumm von Dir. Aber das Script ist dumm. Oder nicht intelligent ...
Doch wie sollte es Deine Gedanken erraten können?

Man könnte im Droplet einen Lichtschalter einbauen, d.h. einen Zähler. Bei ungeraden
Werten würde versucht, die Datei zu öffnen. Bei geraden würde nur die Zeit gestoppt
und abgerechnet. Das könnte wunderbar funktionieren. Tagelang. Bis der Anwender sich
mal vertut und entweder vergisst, die Datei zurückzulegen oder stattdessen eine
andere öffnen will.

In solch einem Fall würde man das Problem zwar sofort bemerken. Aber mindestens eine
Zeitmessung wäre nicht gemacht.

Und nochmals nein: Bei Erstellen meines vorgeschlagenen Scriptes würde ich Dir nicht
zur Seite stehen, sondern zuerst versuchen, eine Schneise in den Dschungel zu schlagen. :-)
Bislang ist ja alles nur Theorie. Ich weiss noch nicht, ob sich meine Skizze wirklich
in ein funktionierendes Script umsetzen lässt.

Ich finde, dass es am besten wäre, wenn ich beide Scripts entwickeln würde. Dann könntest
Du sie testen und in der praktischen Erprobung würde sich die bessere Lösung rasch
durchsetzen und allfällige Verbesserungswünsche würden auch laut.

Bitte teile mir per E-mail mit, welche Version des Mac OS X bei Dir läuft. Dies macht
zwar vielleicht keinen Unterschied, aber dann hätte ich schon die Adresse, an welche
ich die Droplets senden kann.

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

10. Nov 2006, 07:50
Beitrag # 9 von 28
Beitrag ID: #421302
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

danke für das Senden der Infos.

Ich kann nicht sofort mit dem Entwickeln der Scripts beginnen, werde
aber versuchen, übers Wochenende eine erste Version herzustellen.

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

11. Nov 2006, 10:04
Beitrag # 10 von 28
Beitrag ID: #421303
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

hier, wie versprochen, eine erste Version. Den folgenden Code im Format "Programm"
speichern. Damit ergibt sich ein Droplet, welches ich Dir zustellen werde.

Zur Erinnerung: Damit das Ergebnis nicht verfälscht wird, musst Du daran denken,
bei jeder Datei als erstes ein "Sichern-Unter" zu machen, damit das Erstellungsdatum
mit dem Beginn der verrichteten Arbeit übereinstimmt.

Das Benutzen des Droplets ist einfach. Den Ordner, welcher die zu erfassenden
Dateien enthält, auf das Icon des Droplets ziehen. Es können auch lose Dateien
oder mehrere Ordner sein.

Bei allerersten Ausführen erscheint ein Dialog, in welchem der Ordner ausgewählt
werden muss, in den die Logdatei geschrieben werden soll. Der Pfad zu diesem
Ordner wird gespeichert. Der Dialog erscheint erst wieder, wenn der Logdatei-Ordner
umbenannt oder veschoben wurde. Oder nach einem Kompilieren des Scripts.

Bei jeder Anwendung wird eine neue Logdatei erzeugt. Damit die schon bestehenden
nicht überschrieben werden, setzt das Script das Datum samt Uhrzeit in den Namen,
z.B. "Log_061111_102346.txt".

Von jeder Datei werden die Infos verlangt und daraus der Name, das Erstellungs-
und das Änderungsdatum gezogen. Aus den beiden Daten wird die Zeitdifferenz
errechnet und zusammen mit dem Namen in die Logdatei geschrieben.

Am Schluss wird noch das addierte Total angefügt.
Code
 -- die Variable 'logFolder' als 'property' definieren, damit der Pfad zum Logdatei-Ordner gespeichert wird 
property logFolder : ""
-- zwei weitere Variablen als 'global' definieren, damit sie in den Handlern erkannt werden
global logPath
global tSecs

on open allObjects
  -- den gespeicherten Pfad des Logdatei-Ordners prüfen
  try
    alias logFolder
  on error
    set logFolder to (choose folder with prompt "Bitte den Logdatei-Ordner wählen.") as Unicode text
  end try
 
  -- das akuelle Datum speichern
  set curDate to current date
  -- davon Jahr, Monat, Tag, Stunde, Minuten, Sekunden ausziehen und zusammensetzen
  set y to text -2 thru -1 of ((year of curDate) as string)
  set m to text -2 thru -1 of ((month of curDate as number) as string)
  set d to text -2 thru -1 of ((day of curDate) as string)
  set hh to text -2 thru -1 of ("0" & (hours of curDate))
  set mm to text -2 thru -1 of ("0" & (minutes of curDate))
  set ss to text -2 thru -1 of ("0" & (seconds of curDate))
  set timeString to y & m & d & "_" & hh & mm & ss
 
  -- den  Pfad zur Logdatei zusammensetzen
  set logPath to logFolder & "Log_" & timeString & ".txt"
 
  -- das Datum in eine Textkette verwandeln und ...
  set dateString to (curDate as string) & return
  -- ... als ersten Eintrag in die Logdatei schreiben
  writeLog(dateString)
 
  -- die Variable 'tSecs' initialisieren
  set tSecs to 0
 
  -- Wiederholungsschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt
  repeat with aObject in allObjects
    processObject(aObject)
  end repeat
 
  -- das Total Sekunden ins Format "hh:mm:ss" umrechnen lassen
  set timeString to convToTime(tSecs)
  -- die aktuelle Textkette zusammensetzen
  set aString to (return & return & "Total" & tab & timeString) as string
  -- und zum Handler schicken, welcher damit die Logdatei ergänzt
  writeLog(aString)
 
  -- den Anwender informieren
  display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end open

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist
-- bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt
-- (d.h. zum aktuellen Handler geschickt)
-- Dateien werden zum Handler 'processFile' gesandt
on processObject(aObject)
  -- wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner
  -- die Liste dessen Inhalts wird erstellt (ohne unsichtbare Dateien)
  if (aObject as string) ends with ":" then
    set contentsList to list folder aObject without invisibles
    -- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler,
    -- in welchem sie sich selbst befindet
    repeat with anItem in contentsList
      set objPath to ((aObject as string) & anItem)
      processObject(objPath as alias)
    end repeat
    -- wenn das Objekt eine Datei ist, dann wird der Pfad dem Handler 'processFile' übergeben
  else
    set okay to processFile(aObject as string)
  end if
end processObject

-- in diesem Handler werden die Details zusammengetragen
on processFile(aFile)
  -- die Infos der Datei werden gespeichert
  set fileInfo to (info for file aFile)
  -- der Name der Datei wird ausgezogen
  set fileName to name of fileInfo
  -- das Erstellungs- und das Änderungsdatum
  set creDate to creation date of fileInfo
  set modDate to modification date of fileInfo
  -- daraus die Sekunden errechnen
  set nSecs to modDate - creDate
  -- das Ergebnis zum Total addieren
  set tSecs to tSecs + nSecs
  -- zum Handler schicken, welcher die Sekunden in "hh:mm:ss" verwandelt
  set timeString to convToTime(nSecs)
  -- die aktuelle Textkette zusammensetzen
  set aString to (return & fileName & tab & timeString) as string
  -- und zum Handler schicken, welcher damit die Logdatei ergänzt
  writeLog(aString)
end processFile

on writeLog(aString)
  try
    open for access file logPath with write permission
    write aString to file logPath starting at eof
    close access file logPath
  on error
    try
      close access file logPath
    end try
  end try
end writeLog

on convToTime(nSecs)
  set hh to text -2 thru -1 of ("0" & (nSecs div 3600))
  set restSecs to nSecs mod 3600
  set mm to text -2 thru -1 of ("0" & (restSecs div 60))
  set ss to text -2 thru -1 of ("0" & (restSecs mod 60))
  return hh & ":" & mm & ":" & ss
end convToTime

Das andere Script wird etwas schwieriger zu realisieren sein ...

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

11. Nov 2006, 18:51
Beitrag # 11 von 28
Beitrag ID: #421304
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
vielen, vielen Dank, das ging ja wirklich schnell, ich werde das Script testen und Dir dann Bescheid geben.

Wirklich toll :-)

Gruss crow


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

11. Nov 2006, 20:45
Beitrag # 12 von 28
Beitrag ID: #421305
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Crow,

bitteschön!

Und wie per Mail gesagt: Der Code ist zwar ausgiebig mit Kommentaren versehen.
Aber man kann nicht jedes Detail erklären (wegen der 6000-Zeichen-Limite).
Wenn Du also Fragen hast, dann nur her damit!

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

12. Nov 2006, 20:34
Beitrag # 13 von 28
Beitrag ID: #421306
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das Droplet funktioniert super und ich kann mich nur bei Dir und diesem Forum bedanken, ich hoffe ich kann irgendwann auch mal jemanden helfen, ich werde auf jedemfall weiter aktiv bei diesem Forum teilnehmen.

Danke !!!

Gruss
Ben


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Hans Haesler
  
Beiträge gesamt: 5826

12. Nov 2006, 22:26
Beitrag # 14 von 28
Beitrag ID: #421307
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ben,

bitteschön. :-)

Ich habe heute Morgen begonnen, das zweite Script zu entwickeln.
Es lässt sich gut an.

Aber am Nachmittag war ich anderweitig beschäftigt und heute
Abend musste ich auch andere Dinge erledigen.

Ich kann voraussichtlich nicht vor morgen Abend weiterfahren.

Gruss, Hans


als Antwort auf: [#421294]

Zeiterfassung für aktives Fenster oder eine geöffnete Datei

Anonym
Beiträge gesamt: 22827

13. Nov 2006, 09:24
Beitrag # 15 von 28
Beitrag ID: #421308
Bewertung:
(5548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
lass Dir nur Zeit, ich muß bis zum Ende der Woche eine Broschüre fertig bekommen.

Gruss
Ben


als Antwort auf: [#421294]
X