Autor Thema: Feststellen, ob das LN-Programmfenster den Fokus hat  (Gelesen 2597 mal)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Hallo,

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

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 »
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline tfrenz

  • Aktives Mitglied
  • ***
  • Beiträge: 242
  • Geschlecht: Männlich
Re: Feststellen, ob das LN-Programmfenster den Fokus hat
« Antwort #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
Gruß
Thomas

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feststellen, ob das LN-Programmfenster den Fokus hat
« Antwort #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)
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... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Re: Feststellen, ob das LN-Programmfenster den Fokus hat
« Antwort #3 am: 15.06.21 - 13:02:45 »
Ich danke Euch für die schnelle Unterstützung und Hilfe!!!  ;D

Schöne Woche noch!

Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Re: Feststellen, ob das LN-Programmfenster den Fokus hat
« Antwort #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
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Re: Feststellen, ob das LN-Programmfenster den Fokus hat
« Antwort #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...  ;D

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

Danke normals!
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz