Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rar am 02.12.03 - 08:43:29

Titel: Attament automatisch starten
Beitrag von: rar am 02.12.03 - 08:43:29
Hallo!

Ist es möglich mit Script ein Attachment aus einem Dokument direkt zu starten ohne es erst lösen zu müssen oder in der Maske 'ersten Angang automatisch starten' anzuhackln?

lg
-rar
Titel: Re:Attament automatisch starten
Beitrag von: Axel am 02.12.03 - 09:19:23
Hi,

ein Attachment zu starten ist ohne voriges Lösen nicht möglich.

Du müsstest ein Script im Postopen-Event der Maske erstellen, dass den Anhang in ein temp. Verzeichnis löst und dann die zugehörigen Anwendung starten und den Dateinamen als Parameter übergeben.
Ist nur so eine Idee. Was anderes fällt mir im Moment dazu nicht ein.

Axel


Titel: Re:Attament automatisch starten
Beitrag von: rar am 02.12.03 - 10:11:54
Das lösen gefällt mir nicht.
Wenn man in der Maske 'ersten Angang starten' angibt löst Notes den Anhang ja auch nicht irgendwo hin. Oder?
Titel: Re:Attament automatisch starten
Beitrag von: Markus Henke am 02.12.03 - 10:31:39
Hallo,

natürlich löst Notes den Anhang. Such mal in den Notes Ordnern. Irgendwo werden die gestarteten Anhänge sein.

Wo ist denn das Problem die Datei vorher zu lösen? Wenn Du möchtest, kannst Du die ja beim verlassen der Maske wieder löschen.

Gruß
Markus
Titel: Re:Attament automatisch starten
Beitrag von: rar am 02.12.03 - 10:57:44
Seas Markus...
Also ich kann das File nicht finden nachdem es aus einem Dokument heraus geöffnet wurde.

Die Datei nachher wieder löschen.... Das wäre eventuell ein Ansatz. Nur weiß ich auch nicht wie ich das anstellen kann (das löschen).

lg
Titel: Re:Attament automatisch starten
Beitrag von: Driri am 02.12.03 - 11:10:55
Dafür gibt es das Kill-Statement.

Wenn Du den Anhang selber löst, hast Du ja auch den Pfad und Dateinamen. Das ist dann kein Problem.
Titel: Re:Attament automatisch starten
Beitrag von: Joker am 02.12.03 - 11:25:03
@rar

Hi, hab in einer meiner Datenbanken auch so etwas benötigt. Durch eine Button wird ein Anhang gestartet. Gleichzeitig wird ein Temporäres Verzeichnis in C:/Temp angelegt. Beim Verlassen der Datenbank bzw. auch beim Öffnen wird dieses Verzeichnis dann wieder gelöscht. Wärst du interessiert daran ? Dann suche ich mir alles zusammen was du dafür benötigst.

Gruss Martin
Titel: Re:Attament automatisch starten
Beitrag von: Till_21 am 02.12.03 - 11:49:51
Seas Markus...
Also ich kann das File nicht finden nachdem es aus einem Dokument heraus geöffnet wurde.
Anhang:
Sie heisst auch nicht zwingend wie das Attachment im Dokument...
eher so : F76H5d4Hs.tmp


gruss
Titel: Re:Attament automatisch starten
Beitrag von: rar am 02.12.03 - 15:02:01
Ich habe jetzt das Verzeichnis gefunden wo die Datei automatisch hingelöst wird. Wenn ich z.B. 'Bill.jpg' starte, löst Notes das File bei mir ins verzeichnis
C:\...\Lokale Einstellungen\Temp\c.daten.notes

Danke Joker für das Angebot, aber ich glaub mit Driris Tipp werd ich es schaffen. Kill war mir bis jetzt unbekannt.

Einfach ExtractFile, dann öffnen und dann Kill Bill.jpg  ;D

Danke euch allen

-rar
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 10.12.03 - 15:39:06
Hallo zusammen,

klingt alles ganz gut,
nur eine Sache fehlt mir noch.
Wie kann ich überprüfen, ob die Datei noch in der Anwendung geöffnet ist ?

Bei mir (WinXP, Notes 5.0.11) kann ich die Datei löschen obwohl sie noch geöffnet ist.
Schöner wäre dem Anwender eine Meldung ausgeben zu können, dass er die Datei speichern und schließen soll.

Gruß
Outerspace
Titel: Re:Attament automatisch starten
Beitrag von: rar am 10.12.03 - 16:26:46
Ich hab das file dorthin gelöst wo Notes es auch hin löst.
Nämlich ins Verzeichnis:
Environ("Temp") + "\c.daten.notes\"
Dort laß ich sie einfach stehen, ohne löschen, da die Files die ich in dem Programm öffne immer "file.tif" heißen. Wird dann immer neu überschrieben. Wenn file.tif aber noch geöffnet ist funktioniert es aber nicht so. Dann schreib ich einfach so viele xe davor bis ich einen neuen Namen hab.

HTH
rar
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 10.12.03 - 16:39:52
Klar, das löst dein Problem,
meines ist etwas anders gelagert.
Der Anwender öffnet ein Notesdoc mit Anhang.
Auf Knopfdruck löse ich den Anhang ebenfalls ins Tempdir
und starte den Anhang mit der betriebssystem verknüpften
Anwendung.
Wenn mein Anwender das Notesdoc wieder schliesst,
will ich die aktualisierte Datei wieder in das Doc anhängen.
Dazu sollte die Bearbeitung der Datei aber abgeschlossen sein.
Bei MS-Office und pdf-Dateien funzt das auch, nur gif, jpg und sogar txt Dateien laufen so durch.
d.h.: ich brauche eine sichere Funktion, die mir überprüft, ob die Datei noch geöffnet ist ?????
Titel: Re:Attament automatisch starten
Beitrag von: rar am 10.12.03 - 16:48:47
Da kann ich dir leider auch nicht helfen.

Aber ich glaube das ist in Notes 6 Standard. Hilft dir aber wahrscheinlich nicht.
lg
-rar
 
Titel: Re:Attament automatisch starten
Beitrag von: Semeaphoros am 10.12.03 - 16:59:08
outerspace: das geht nicht generell. Das hängt ganz davon ab, wie die betreffende Applikation die Datei öffnet. Nur wenn die Datei von der Applikation gesperrt wird (was leider nicht alle tun), ist es möglich, festzustellen, wann die Applikation mit der Bearbeitung fertig ist ..... Ueberreste aus der DOS-Zeit :-(
Titel: Re:Attament automatisch starten
Beitrag von: techner am 10.12.03 - 17:09:17
Hier in diesem Forum wurde eine DB als Freeware angeboten. In der DB sind PDF abgelegt. Diese werden durch einen Doppelklick ohne weitere Abfragen gestartet. Also ist aus meiner Sicht die Idee hier umgesetzt
Titel: Re:Attament automatisch starten
Beitrag von: Semeaphoros am 10.12.03 - 17:21:37
PDF Dateien werden normalerweise nicht aktualisiert. Outerspace will feststellen, wann die Aktualisierung durch die externe Software abgeschlossen ist. Das mit dem Starten ist schon mehrfach angesprochen und gelöst worden .... tja ...
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 10.12.03 - 17:54:09
Der Adobe Acrobat ist sogar noch eine Anwendung die die Datei auf Betriebssystemebene sperrt.
Es tun halt nicht mehr alle anscheinend.
Titel: Re:Attament automatisch starten
Beitrag von: ata am 11.12.03 - 11:09:02
... Eknori hat zum erneuten Einhängen von bearbeiteten Attachments eine DB => ReAttach.nsf - damit wird dieses auch in R5 ermöglicht...

... bei kommerzieller Nutzung kannst du von Eknori eine Lizenz erwerben - auf jeden Fall günstiger als selbst schreiben...

ata
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 11.12.03 - 11:33:15
Meine Lösung ist soweit schon fertig.
Das einzige was fehlt ist die Abfrage, ob die Datei noch geöffnet ist.
Selbst R6, wo das Attachmenthandling erweitert worden ist,
prüft das meines Wisens nicht.
Titel: Re:Attament automatisch starten
Beitrag von: rar am 11.12.03 - 13:48:51
Wie startet man eigentlich einen Anhang mit der im Betriebssystem verknüpften Anwendung?

Ich habe hardcoded den Pfad eines Programmes eingegeben. Funktioniert zwar, aber anders wäre es natürlich schöner.
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 11.12.03 - 13:59:22
Dazu habe ich mal das gefunden:
http://www.microsoft.com/germany/ms/msdnbiblio/show_all.asp?siteid=545232

Einfach die Funktion deklarieren und dann aufrufen.
Titel: Re:Attament automatisch starten
Beitrag von: rar am 11.12.03 - 17:07:33
Coole Sache.  :D
Ich danke dir für den Link. Funktioniert einwandfrei.

-rar
Titel: Re:Attament automatisch starten
Beitrag von: eknori am 11.12.03 - 17:20:10
Zitat
Zitat
Das einzige was fehlt ist die Abfrage, ob die Datei noch geöffnet ist.

Du könntest prüfen, ob die Anwendung noch geöffnet ist

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (Byval lpClassName&, Byval lpWindowName As String) As Long

Sub Click(Source As Button)
   Dim winHwnd As Long
   Dim RetVal As Long
   winHwnd = FindWindow(0, "Microsoft Word - Dokument1")
   If winHwnd <> 0 Then
      Msgbox "Winword is  open"
   Else
      Msgbox "Winword is not open"
   End If
End Sub

oder, wenn du das "Microsoft Word - Dokument1" durch ein "Microsoft Word - NameDesDokument")

ersetzt, kannst du auch prüfen, ob ein bestimmtes Doc geöffnet ist


Zitat
Selbst R6, wo das Attachmenthandling erweitert worden ist,
prüft das meines Wisens nicht.

yoo, die haben die Funktion bei mir abgekupfert (ReAttach gibt es schon seit 1998 ; R4.6 ) :D
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 11.12.03 - 17:28:06
Klingt gut
Die Anwendung findet man heraus indem man die Registry ausliest.
Das hab ich irgendwo schon gelesen(Ich glaube es war in Deiner Schatzkiste eknori),
nur wie finde ich heraus was die Anwendung in die Titelzeile schreibt ?
Titel: Re:Attament automatisch starten
Beitrag von: eknori am 11.12.03 - 17:45:54
Um ie Anwendung zu finden kannst du zum EInen die Reg auslesen; es gibt aber auch eine API dazu.

Den Fenstertitel ? Starte mal ein Doc im Word; ich glaube der wird immer zusammengesetzt aus Anwendungsname + DocumentenTitel.

Da du den Anhang aber eh detachen musst, kannst du auch dein Tempdir auf das Vorhandensein der Datei prüfen.

Ulrich
Titel: Re:Attament automatisch starten
Beitrag von: outerspace am 11.12.03 - 18:03:33
Ich detache die Datei und starte sie mit ShellExecute.
d.h.: ich weiss nicht welche Anwendung gestartet wird.
In Anbetracht der vielen Dateiendungen und der unzähligen Anwendungen, die pro Dateiendung möglich sind,
kann man unmöglich alle Kombinationen erfassen.
Ich fürchte, das ist eine Sackgasse.
Eine API Funktion, die Pfad und Dateinamen als Parameter bekommt und mir dann das Handle der Anwendung oder Null zurückgibt wäre schön, gibt es aber wohl nicht.

Andreas
Titel: Re:Attament automatisch starten
Beitrag von: eknori am 11.12.03 - 18:17:28
Declare Function FindExecutable Lib "shell32.dll"  Alias "FindExecutableA" (Byval lpFile As String, Byval lpDirectory As String, Byval sResult As String) As Long

Const MAX_PATH = 260
Const ERROR_FILE_NO_ASSOCIATION  = 31
Const ERROR_FILE_NOT_FOUND  = 2
Const ERROR_PATH_NOT_FOUND  = 3
Const ERROR_FILE_SUCCESS = 32 'my constant
Const ERROR_BAD_FORMAT  = 11

Sub Click(Source As Button)
   
   Dim success As Long
   Dim pos As Long
   Dim sResult As String
   Dim msg As String
   
   sResult = Space$(MAX_PATH)
   
  'lpFile: name of the file of interest
  'lpDirectory: location of lpFile
  'sResult: path and name of executable associated with lpFile
   success = FindExecutable("Meine Bilder0001.jpg", "c:\temp\", sResult)
   
   Select Case success
   Case ERROR_FILE_NO_ASSOCIATION: msg = "no association"
   Case ERROR_FILE_NOT_FOUND: msg = "file not found"
   Case ERROR_PATH_NOT_FOUND: msg = "path not found"
   Case ERROR_BAD_FORMAT:     msg = "bad format"
      
   Case Is >= ERROR_FILE_SUCCESS:
      
      pos = Instr(sResult, Chr$(0))
      
      If pos Then
         msg = Left$(sResult, pos - 1)
      End If
      
   End Select
   
   Msgbox msg
   
End Sub

Damit findest du schon mal die Anwendung.

Unter der Voraussetzung, daß immer nur ene Instanz einer Anwendung geöffnet ist, könntest du dann die laufenden Prozesse abfragen. Ist der Prozeß da, ist das Doc geöffnet. Wie gesagt, unter der Voraussetzung das...

Titel: Re:Attament automatisch starten
Beitrag von: eknori am 11.12.03 - 18:19:44
eine weitere Möglichkeit wäre, sich alle Fenster Handles zu holen und dann den Windows Titel mit dem AtachmentName zu checken  ( es gibt da eine API EnumWindows; muß ich raussuchen, habe ich nicht im Kopf, wie die Syntax ist )


hier isse http://www.vbarchiv.net/vbapi/EnumWindows.php bzw

http://www.mvps.org/vbnet/index.html?code/enums/enumwindowsdemo.htm (http://www.mvps.org/vbnet/index.html?code/enums/enumwindowsdemo.htm)