AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
21.09.21 - 19:29:52
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Domino 9 und frühere Versionen
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  Feststellen, ob das LN-Programmfenster den Fokus hat
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Feststellen, ob das LN-Programmfenster den Fokus hat  (Gelesen 826 mal)
FrankLU
Junior Mitglied
**
Offline Offline

Geschlecht: Männlich
Beiträge: 79



« am: 11.06.21 - 17:37:36 »

Hallo,

ich habe pünktlich zum Wochenende noch ein Problem, das mir das Wochenende aber nicht vermiesen wird.  Grin

Situation:
Ich erstelle per LS und Notes2Paper Rechnungen im PDF-Format, die ich in einem lokalen Verzeichnis ablege. Zu jeder Rechnung kann es gescannte Fremddokumente geben (z.B. Arbeitsnachweise, Fremdrechnungen), die im PDF-Format vorliegen, und die mit der Rechnung per E-Mail versendet werden sollen.
Der Kunde möchte nun nicht eine Mail mit x Anhängen zu einem Abrechnungsfall bekommen, sondern nur eine Mail mit einem Anhang, in dem alle PDF-Dateien in einer PDF-Datei zusammengefasst sind.
Mit Hilfe der freien PDF-Software "PDF24" kann ich in einem Shell-Befehl veranlassen, dass alle (PDF-)Dateien in einem Verzeichnis zu einer PDF-Datei zusammengefasst werden. Diese zusammengefasste PDF-Datei kann ich dann per LS in eine E-Mail hängen.

Problem:
Der Shell-Befehl wartet nach dem Aufruf nicht, bis das aufgerufene Programm beendet ist, sondern LS läuft im Hintergrund (während des Packens der PDFs) weiter und verarbeitet die nächste Rechnung. Das würde dazu führen, dass bei vielen zu verarbeitenden Rechnungen das Programm PDF24 unzählige Male gleichzeitig liefe, was auch Crash-anfällig ist.

Frage:
Kann man in einem laufenden LS abfragen, ob der Notes-Client das aktive Windows-Programm ist? Durch den Aufruf von "Shell" mit dem windowStyle "1", verliert das LN-Fenster ja den Fokus und bekommt ihn wieder, wenn PDF24 sich wieder schließt, nachdem es gearbeitet hat. Das würde ich für eine Warte-Schleife nutzen wollen, die man auch noch zeitlich befristen könnte, damit's keine Endlosschleife wird...

Weiß da jemand eine Lösung?

Ich wünsche ein schönes Wochenende!
Frank
« Letzte Änderung: 12.07.21 - 14:47:20 von FrankLU » Gespeichert

Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 9.0.1FP8
Client (Admin): 9.0.1
Server: 9.0 auf Linux
tfrenz
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 226



« Antworten #1 am: 12.06.21 - 09:28:16 »

Hallo, wenn das ganze ein Windows batch ist, kann man mit "start /wait prog.exe" warten, bis das Programm ausgeführt ist.
Erst dann wird der nächste Befehl abgearbeitet.
Bei Linux kenne ich das in dem man mit "&&" mehrere Script befehle verbindet.

gruß Thomas
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6620


Geht nicht, gibt's (fast) nicht... *g*


WWW
« Antworten #2 am: 12.06.21 - 15:03:56 »

Verwende ganz einfach statt des LotusScript Shell- Befehls den ShellExecute- Befehl aus der shell32.dll. Denn dieser liefert einen Rückgabewert, und LotusScript wartet, bis das Programm beendet ist:
Code:
'-In den Declarations :
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (Byval hwnd As Long, Byval lpOperation As String, Byval lpFile As String, Byval lpParameters As String, Byval lpDirectory As String, Byval nShowCmd As Long) As Long

'-und aufgerufen wird das ganze dann so:

shRet = ShellExecute(0, "Open", "DeinCommand" , 0, 0, 1)
Gespeichert

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
FrankLU
Junior Mitglied
**
Offline Offline

Geschlecht: Männlich
Beiträge: 79



« Antworten #3 am: 15.06.21 - 13:02:45 »

Ich danke Euch für die schnelle Unterstützung und Hilfe!!!  Grin

Schöne Woche noch!

Frank
Gespeichert

Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 9.0.1FP8
Client (Admin): 9.0.1
Server: 9.0 auf Linux
FrankLU
Junior Mitglied
**
Offline Offline

Geschlecht: Männlich
Beiträge: 79



« Antworten #4 am: 12.07.21 - 14:31:04 »

Hallo!

Ich wünsche Euch eine guten Start in die neue Woche!

Leider hat sich mein Problem noch nicht gelöst, der ShellExecute eine Programm zur PDF-Erstellung aufzurufen.
Es geht darum, mit dem netten Tool PDF24 vorhandene PDF-Dateien in ein PDF-Dokument zu packen, um nur einen Dateianhang per Mail wegschicken zu müssen.
Hier mal der Testcode:

Code:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(Byval hwnd As Long, Byval lpszOp As String, _
Byval lpszFile As String, Byval lpszParams As String, _
Byval LpszDir As String, Byval FsShowCmd As Long) As Long

Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uiDoc As NotesUIDocument
Dim Dateien (3) As String
Dateien(0) = "C:\Temp\Rechnung.pdf"
Dateien(1) = "C:\Temp\Korrespondenz.pdf"
Dateien(2) = "C:\Temp\Bericht.pdf"
Dim Param As String
Dim Result As Integer
Set uiDoc = ws.CurrentDocument
Param = " -join -profile default/good -outputFile C:\Temp\" & uiDoc.FieldGetText("KDNR") & ".pdf " & Join(Dateien, " ")
'Result = Shell("C:\Program Files (x86)\PDF24\pdf24-doctool.exe" + Param ,1)
Result = ShellExecute(0, "Open", "C:\Program Files (x86)\PDF24\pdf24-doctool.exe" + Param, 0, 0, 1)
End Sub

Wenn ich den Code mit Shell ausführe, läuft er problemlos durch und ich erhalte die PDF-Datei.
Wenn ich den gleichen befehl mit ShellExecute absetzen will, erhalte ich Result = 2, was wohl "Datei nicht gefunden" bedeutet. Nur welche Datei findet er denn nicht?

Ich hoffe, Ihr könnt mir noch mal helfen. Danke im voraus!

Frank
Gespeichert

Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 9.0.1FP8
Client (Admin): 9.0.1
Server: 9.0 auf Linux
FrankLU
Junior Mitglied
**
Offline Offline

Geschlecht: Männlich
Beiträge: 79



« Antworten #5 am: 12.07.21 - 14:47:03 »

Ok, habe es selber herausgefunden.

Die Programmparameter (String "Param") für das Programm pdf24-doctool.exe muss beim ShellExceute in der Parameter-Variable übergeben werden, nicht mit im Parameter für den Programmaufruf.

Eigentlich logisch...  Grin

Code:
Result = ShellExecute(0, "Open", "C:\Program Files (x86)\PDF24\pdf24-doctool.exe", Param, 0, 1)

Danke normals!
Gespeichert

Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 9.0.1FP8
Client (Admin): 9.0.1
Server: 9.0 auf Linux
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: