1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Schnuffel

Beiträge von Schnuffel

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 26. Januar 2024 um 16:02

    Hallo Swiffer,

    so, ich hab da mal was zusammengezimmert. Aufgrund der Problematik pdf und der Umstellung auf "aus Text Datei lesen" hat es mich mehr Zeit gekostet als erwartet.

    Aber naja, das ist eher mein Problem und animiert höchstens zu einem etwas üppigeren Trinkgeld. ^^

    Also. Ich habe es jetzt so gemacht wie gewünscht.
    Ghostscript wandelt die QR-pdf in txt-Dateien. pdftoolkit merged die pdf, da nitro keinerlei Doku zu Commandline Switches oder einer API hat.
    Das Script erwartet auf dem ausführenden Rechner die Installation der 2 Programme.
    https://ghostscript.com/releases/gsdnld.html
    https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
    jeweils in der 32-bit Version (zwecks Kompatibilität)

    Die Pfade und so sind anpassbar.
    Probier es einfach mal aus. Hab auch so Sachen wie optionales archivieren mit reingepackt, da ich die Qualität der Daten nicht einschätzen kann.

    Natürlich kannst du mit dem Script machen was du möchtest. Es ist deins.
    Bezüglich Trinkgeld kannst du das an mein paypal schicken. (o.zimmermann@pc-wizards.de) mit der E-Mail Adresse sollte das funktionieren.
    Wie gesagt, meine "Range" kennst du. Dass ich mehr als 2-3 Std. gebraucht habe ist baer wie gesagt mein Problem.
    Bin halt ein netter Mensch ^^ wenn etwas nicht passt einfach melden ;)
    Ach ja, ein schönes Wochenende wünsche ich...

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    
    Opt("WinTitleMatchMode", 2)
    Opt("MustDeclareVars", 1)
    
    #cs
    Bedingungen:
    Download und Installation folgender Programme im Standardverzeichnis
    pdftkfree ==> https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_free-2.02-win-setup.exe
    Ghostscript ==> https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10021/gs10021w32.exe
    #ce
    
    ; Variablen, die angepasst werden können
    Global $sTitel = "merge PDF-Tool"
    Global $sPathRechnungPDF = "C:\RG ohne EZ"
    Global $sPathQRPDF = "C:\QR EZ"
    Global $sPathQRTxt = $sPathQRPDF & "\txt"
    Global $sDestinationIP = "192.168.150.34" ; um die IP pingen zu können (Test Verfügbarkeit)
    Global $sPathDestinationPDF = "\\" & $sDestinationIP & "\NAS Zuhause synch verschlüsselt\Firma\Rechnungen"
    Global $sPathRechnungArchiv = $sPathRechnungPDF & "\Archiv"
    Global $sPathQRArchiv = $sPathQRPDF & "\Archiv"
    
    Global $sRegExSuchString = ".*(\d{4}-\d{4}).*" ; der Suchstring extrahiert aus dem Rechungsnamen nnnn-nnnn
    Global $nScanPause = 120 ; Zeit in Sekunden als Pausenangabe bis zum nächsten Scan des Source Ordners, beginnt mit Pause!
    Global $bArchivieren = 1 ; wenn aktiviert dann wird jede pdf in "Archiv" kopiert vor merge
    
    ; Installationen von Ghostscript und pdftk prüfen
    Global $aEnvPath = StringSplit(EnvGet("Path"), ';')
    For $i = 1 To $aEnvPath[0]
    	If StringInStr($aEnvPath[$i], "gs\gs") Then
    		If FileExists($aEnvPath[$i] & '\gswin32c.exe') And FileExists($aEnvPath[$i] & '\gsdll32.dll') Then
    			Global $sPathToMergeTool = $aEnvPath[$i] & '\gswin32c.exe'
    			ExitLoop
    		Else
    			ShellExecute("https://ghostscript.com/releases/gsdnld.html")
    			Exit MsgBox(262144 + 16, $sTitel, "Die zur Ausführung benötigte Datei: " & $aEnvPath[$i] & '\gswin32c.exe' & " konnte nicht gefunden werden." & @CRLF & @CRLF & "Installieren Sie die 32-bit Version von GhostScript und starten Sie dieses Script dann erneut.")
    		EndIf
    	EndIf
    Next
    
    If FileExists("C:\Program Files (x86)\PDFtk\bin\pdftk.exe") And FileExists("C:\Program Files (x86)\PDFtk\bin\libiconv2.dll") Then
    	Global $sPathToMergeTool = 'C:\Program Files (x86)\PDFtk\bin\pdftk.exe'
    Else
    	ShellExecute("https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/")
    	Exit MsgBox(262144 + 16, $sTitel, "Die zur Ausführung benötigte Datei: C:\Program Files (x86)\PDFtk\bin\pdftk.exe  konnte nicht gefunden werden." & @CRLF & @CRLF & "Installieren Sie die 32-bit Version von GhostScript und starten Sie dieses Script dann erneut.")
    EndIf
    
     ; Das Script erwartet die Dateien pdftk.exe & die libiconv2.dll im Scriptverzeichnis
    Global $sPathToGSWin32cTool = @ScriptDir & '\gswin32c.exe' ; Das Script erwartet die Dateien gswin32c.exe & gsdll32.dll im Scriptverzeichnis
    
    ; interne Variablendeklaration
    Global $command, $PID, $sTxt, $sQRFilePDF, $hRechnungPDF, $sSearchString, $sRechnungFileName, $aQRListePDF, $aQRListeTxt, $nTimer, $Error, $ErrorMsg, $bQRFound = 0, $sAkt_Searchtxt, $bfirstStart = 1
    
    ; prüfen, ob die Ordner existieren, eine Berechtigungs-Prüfung innerhalb der Ordner wird nicht durchgeführt (Schreibrechte)
    If DriveGetType($sPathRechnungPDF) = "Network" Then
    	If Ping($sPathRechnungPDF, 500) = 0 Then Exit MsgBox(262144 + 16, $sTitel, "Der Ordner " & $sPathRechnungPDF & " konnte nicht erreicht werden!" & @CRLF & "Die Anwendung wird beendet.")
    EndIf
    If DriveGetType($sPathQRPDF) = "Network" Then
    	If Ping($sPathQRPDF, 500) = 0 Then Exit MsgBox(262144 + 16, $sTitel, "Der Ordner " & $sPathQRPDF & " konnte nicht erreicht werden!" & @CRLF & "Die Anwendung wird beendet.")
    EndIf
    If DriveGetType($sDestinationIP) = "Network" Then
    	If Ping($sDestinationIP, 500) = 0 Then Exit MsgBox(262144 + 16, $sTitel, "Der Pfad " & $sDestinationIP & " konnte nicht erreicht werden!" & @CRLF & "Die Anwendung wird beendet.")
    EndIf
    If Not FileWrite($sPathRechnungPDF & "\Testdatei.tmp", "") Then Exit MsgBox(262144 + 16, $sTitel, "Der Ordner " & $sPathRechnungPDF & " konnte nicht erreicht werden!" & @CRLF & "Die Anwendung wird beendet.")
    FileDelete($sPathRechnungPDF & "\Testdatei.tmp")
    If Not FileWrite($sPathQRPDF & "\Testdatei.tmp", "") Then Exit MsgBox(262144 + 16, $sTitel, "Der Ordner " & $sPathQRPDF & " konnte nicht erreicht werden!" & @CRLF & "Die Anwendung wird beendet.")
    FileDelete($sPathQRPDF & "\Testdatei.tmp")
    If Not FileWrite($sPathDestinationPDF & "\Testdatei.tmp", "") Then Exit MsgBox(262144 + 16, $sTitel, "Der Ordner " & $sPathDestinationPDF & " konnte nicht erreicht werden!" & @CRLF & "Die Anwendung wird beendet.")
    FileDelete($sPathDestinationPDF & "\Testdatei.tmp")
    
    If $bArchivieren Then
    	If Not FileExists($sPathRechnungArchiv) Then DirCreate($sPathRechnungArchiv)
    	If Not FileExists($sPathQRArchiv) Then DirCreate($sPathQRArchiv)
    EndIf
    If Not FileExists($sPathQRPDF & "\txt") Then DirCreate($sPathQRPDF & "\txt") ; Unterordner für die zu durchsuchenden txt-Dateien erstellen
    
    ; HotKey, der die Anwendung beendet (funktioniert bei au3 wie auch bei exe)
    HotKeySet("!x", "_Exit")
    
    $nTimer = TimerInit() ; aktuelle Systemzeit holen und die Pausezeit addieren, damit wird sofort die Schleife durchlaufen und erst nach 1 Durchlauf pausiert
    
    While Sleep(10) ; 10ms schlafen um Prozessor zu entlasten
    	If $bfirstStart = 1 Or TimerDiff($nTimer) > $nScanPause * 1000  Then ; solange gegen die Pausezeit prüfen, bis überschritten, dann nach PDF-Datei suchen
    		$bfirstStart = 0
    		ConsoleWrite("geht los" & @CRLF)
    
    		$nTimer = TimerInit() ; aktuelle Systemzeit holen, damit wieder gegen die Pausezeit verglichen werden kann
    		$hRechnungPDF = FileFindFirstFile($sPathRechnungPDF & "\*.pdf") ; sucht in dem angebenen Ordner nach pdf-Datei/en
    		If $hRechnungPDF = -1 Then ; keine pdf-Datei gefunden
    			FileClose($hRechnungPDF) ; Such-Handle $hRechnungPDF wieder schließen
    			ContinueLoop ; keine Datei gefunden, Loop von vorn beginnen und von Anfang mit Pause
    		Else ; mind. 1 Datei wurde gefunden
    			$bQRFound = 0
    			While 1 ; Loop der alle zu durchsuchenden Dateien durchgeht und wenn alle durch, dann Schleife verlassen
    				$sRechnungFileName = FileFindNextFile($hRechnungPDF) ; erste/nächste pdf-Datei  aus dem Such-Handle $hRechnungPDF der Variable zuweisen
    				If @error Then ExitLoop ; keine Datei mehr vorhanden, Loop Abbruch
    				ConsoleWrite("pdf-Datei wird verarbeitet: " & $sRechnungFileName & @CRLF)
    				$sSearchString = StringRegExpReplace($sRechnungFileName, $sRegExSuchString, "$1") ; Suchstring auf den RegEx im Dateinamen reduzieren
    
    				; Fileliste aller QR pdf-Dateien inkl. Unterordner erstellen, in denen gesucht werden soll, Ordner Archiv und txt sind excluded
    				; Prüfung bei jedem Durchlauf, damit die txt bei Rechnungsstellung auch vorhanden ist
    				$aQRListePDF = _FileListToArrayRec($sPathQRPDF, "*.pdf||Archiv;txt", 1, 1, 1)
    				If @error > 0 Then ContinueLoop ; wenn keine pdf-Datei gefunden wurde, dann den Loop neu starten da keine Datei zum anhängen vorhanden ist
    				For $s = 1 To $aQRListePDF[0] ; wenn eine pdf-Datei noch nicht als txt-Datei vorhanden, dann erstellen
    					If Not FileExists($sPathQRPDF & "\txt\" & StringRegExpReplace($aQRListePDF[$s], "(.pdf)", ".txt")) Then
    						; mit Ghostscript die Datei in eine txt-Datei konvertieren und im Unterordner txt abspeichern
    						RunWait('"' & $sPathToGSWin32cTool & '" -sDEVICE=txtwrite -sOutputFile="' & $sPathQRTxt & "\" & StringRegExpReplace($aQRListePDF[$s], "(.pdf)", ".txt") & '" -dBATCH  -dNOPAUSE "' & $sPathQRPDF & "\" & $aQRListePDF[$s] & '"', "", @SW_HIDE)
    					EndIf
    				Next
    
    				; Fileliste aller txt-Dateien erstellen, in denen gesucht werden soll
    				$aQRListeTxt = _FileListToArrayRec($sPathQRTxt, "*.txt||", 1, 1, 1)
    				$Error = @error ; Fehlercode abfangen und in Datei schreiben um diesen weiter zu verarbeiten
    				If $Error > 0 Then ; wenn Fehler, dann melden und Anwendung beenden
    					Switch $Error
    						Case 1
    							$ErrorMsg = "Path not found or invalid"
    						Case 2
    							$ErrorMsg = "Invalid Include parameter"
    						Case 3
    							$ErrorMsg = "Invalid Exclude parameter"
    						Case 4
    							$ErrorMsg = "Invalid Exclude_Folders parameter"
    						Case 5
    							$ErrorMsg = "Invalid $iReturn parameter"
    						Case 6
    							$ErrorMsg = "Invalid $iRecur parameter"
    						Case 7
    							$ErrorMsg = "Invalid $iSort parameter"
    						Case 8
    							$ErrorMsg = "Invalid $iReturnPath parameter"
    						Case 9
    							$ErrorMsg = "No files/folders found"
    					EndSwitch
    					Exit MsgBox(262144 + 64, $sTitel, "Die Liste mit Dateien die durchsucht werden sollen, konnte nicht erstellt werden." & @CRLF & _
    							"Der Fehlercode aus _FileListToArrayRec lautet:" & $ErrorMsg & @CRLF & @CRLF & "Die Anwendung wird beendet!")
    				EndIf
    
    				If $aQRListePDF[0] <> $aQRListeTxt[0] Then Exit MsgBox(262144 + 16, $sTitel, "Die Anzahl der QR-pdf Dateien stimmt nicht mit der Anzahl QR Txt-Dateien überein!" & @CRLF & "Das Script wird beendet!")
    
    				For $i = 1 To $aQRListeTxt[0] ; alle vorhandenen txt-Dateien in $sPathQRTxt nach dem Suchstring der Rechnung durchsuchen
    					$sTxt = FileRead($sPathQRTxt & "\" & $aQRListeTxt[$i])
    					If StringInStr($sTxt, $sSearchString) > 0 Then ; Suchstring in einer txt-Datei gefunden
    						$bQRFound = 1
    						; $sRechnungFileName = aktueller Dateiname der RechnungsPDF
    						; $aQRListeTxt[$i] = aktueller Dateiname der txt-Datei die durchsucht wird
    						; $sQRFilePDF = aktuelle QR pdf-Datei die zur gefundenen txt-Datei gehört
    						$sQRFilePDF = StringRegExpReplace($aQRListeTxt[$i], "(.txt)", ".pdf")
    						; mit gefundener Datei mergen und Output nach Destination
    						$command = '"' & $sPathToMergeTool & '" "' & $sPathRechnungPDF & '\' & $sRechnungFileName & '" "' & $sPathQRPDF & '\' & $sQRFilePDF & '" cat output "' & $sPathDestinationPDF & '\' & StringReplace($sRechnungFileName, '.pdf', '+.pdf') & '"'
    						;ConsoleWrite($command & @CRLF)
    						$PID = Run($command, "", @SW_SHOW, 2)
    						Sleep(5000)
    						If FileExists($sPathDestinationPDF & '\' & StringReplace($sRechnungFileName, '.pdf', '+.pdf')) = 1 Then
    							ConsoleWrite($sPathDestinationPDF & '\' & StringReplace($sRechnungFileName, '.pdf', '+.pdf') & " gemerged und abgelegt" & @CRLF & @CRLF)
    							If $bArchivieren Then
    								; Rechnung in Archiv kopieren wenn Archiv aktiviert
    								FileCopy($sPathRechnungPDF & "\" & $sRechnungFileName, $sPathRechnungArchiv)
    								; gefundene pdf-Datei in Archiv kopieren, da die Fund-Datei nach merge gelöscht wird, wenn Archiv aktiviert
    								FileCopy($sPathQRPDF & "\" & $sAkt_Searchtxt, $sPathQRArchiv)
    							EndIf
    							FileDelete($sPathRechnungPDF & "\" & $sRechnungFileName)
    							FileDelete($sPathQRTxt & "\" & $aQRListeTxt[$i])
    							FileDelete($sPathQRPDF & "\" & $sQRFilePDF)
    							ExitLoop
    						Else ; merge-PDF nicht vorhanden, etwas ist beim zusammenführen schief gelaufen, Prüfung auf Return Code der Konsolenausgabe ist aufwendiger
    							ConsoleWrite($sPathDestinationPDF & '\' & $sSearchString & "+.pdf nicht gefunden" & @CRLF)
    							MsgBox(262144 + 16, $sTitel, "Die Datei " & $sPathRechnungPDF & "\" & $sSearchString & ".pdf konnte nicht mit " & $sPathQRPDF & '\' & StringReplace($sAkt_Searchtxt, ".txt", ".pdf") & " zusammengeführt werden" & @CRLF & "Das Skript wartet, bis das Fenster geschlossen wird.")
    						EndIf
    					EndIf
    				Next
    			WEnd
    		EndIf
    		If $bQRFound = 0 Then
    			If MsgBox(16 + 1, $sTitel, "Der Dateiname " & $sSearchString & " der Rechnung konnte in keiner Datei in " & $sPathQRPDF & " gefunden werden!") = 2 Then Exit
    			ExitLoop
    		EndIf
    		FileClose($hRechnungPDF)
    	EndIf
    WEnd
    
    Func _Exit()
    	FileDelete($sPathQRTxt & "\*.txt")
    	Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 22. Januar 2024 um 17:42

    nun,

    die Code Ergebnisse sind grundsätzlich als Einstieg manchmal anwendbar.

    In diesem Fall braucht man aber einen installierten Adobe Acrobat.

    Solche Feinheiten werden dann aber verschwiegen.

    Und grundsätzlich bringt es den Fragesteller auch nicht wirklich weiter. Wer nicht versteht wie das Skript arbeitet, wird es ohne die Abhängigkeit zu kennen auch nicht zum Laufen bringen. Und wer es versteht, der schreibt es mal eben schnell selber.

    Ich halte von diesen "Antwort-Maschinen" gar nichts.
    Besonders wie du selber schon geschrieben hast: Prüfen musst du es trotzdem...

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 21. Januar 2024 um 11:05

    ich habe zumindest herausbekommen, dass Nitro PDF auch über die Cmd angesprochen werden kann um pdf Dateien zu mergen.

    siehe: https://community.gonitro.com/topic/15158-li…ers-and-syntax/

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 21. Januar 2024 um 08:53

    wir haben die Rubrik „Programmieranfrage mit Gegenleistung“ vielleicht findet sich da jemand der dir das programmiert. ;)

    Mit Gegenleistung

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 18:07

    da hast du mich falsch verstanden.

    Du sollst nicht dein Problem selber lösen.

    Aber,

    wir sind kein Forum, das fertige Lösungen präsentiert. Auch wenn AspirinJunkie dir da einen anderen Eindruck vermittelt hat.
    Das liegt im Ermessen jedes Einzelnen, der hier in seiner Freizeit versucht, andere zu unterstützen.

    Sozusagen Hilfe zur Selbsthilfe.

    Wir möchten jeden ermutigen sich mit dem Thema IT, AutoIt und Programmierung zu beschäftigen.
    Wir unterstützen jeden, der sich damit auseinandersetzt und dann in seinem Findungsprozess auf Hürden stößt.

    Wir sind aber keine Code-Schmiede an die man einen Wunsch schickt und erwarten kann, dass man fertige Scripte inkl. Errorhandling erhält.

    Ich ging davon aus dass du dich mit dem von mir geposteten Script auseinandersetzt und versuchst es zu verstehen,
    um es an deine Bedürfnisse anzupassen.
    Die Frage ob denn @DesktopDir richtig ist zeigt mir, dass du wohl eher der Copy & Paste Typ bist.
    Vielleicht kann ich dich auf die "gute" Seite der Programmierer holen. Hirn einschalten, Eigenanspruch hochfahren, Problem identifizieren und dann, wenn es zu kompliziert wird sich Unterstützung suchen. Dafür sind wir hier. ;)

    Copy & Paste ist der falsche Weg, da zu bequem und immer auf Kosten anderer.

    Ich möchte dir das hier nicht unterstellen, sondern dich ermutigen das Problem anzugehen und uns als "unterstützende Einheit" zu sehen.
    Wir sind fast 24/7 hier. Wir lesen jeden Post.
    Wenn jemand etwas sinnvolles beizutragen hat wird er es tun und die anderen werden lesen, lernen und schweigen.

    :rofl::rofl::rofl:

    Naja, manchmal ;)

    Auf jeden Fall:

    Versuche das bisher gelieferte in eine für dich sinnvolle Abfolge von Befehlen zu bringen, die du verstehst.
    Was du nicht verstehst versuche in der Hilfe nachzulesen.
    Wenn das auch nicht ausreicht, dann stelle hier eine Frage mit Scriptansatz (lauffähig) und allen (auch Demo-Dateien) die das Problem herbeiführen.
    Auch wir sind bequem und möchten eher helfen, wenn wir nur F5 drücken müssen, anstatt uns eine Demonstrationsumgebung aufzubauen, um dir zu erklären warum z.B. eine "MsgBox in der Situation nicht angezeigt wird".

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 17:26

    nun ja, ich habe ja geschrieben, "an deine Bedürfnisse anpassen".

    Wir werden dir wohl keinen fertigen Bausatz liefern.

    Ein wenig eigener Hirnschmalz und der Wille es auch ein wenig selbst geschafft zu haben erwarten wir in der Regel schon.

    Wenn du mit einzelnen Befehlen nicht klar kommst, dann schau dir zuallererst die Hilfe dazu an.
    Die erklärt in den meisten Fällen die Sache ganz gut. Wenn du dann das Script an deine Bedürfnisse angepasst hast und nicht weiter kommst,

    poste hier dein Script und eine passende Fehlerbeschreibung. Ich bin sicher dann wird dr auch geholfen ;)

    Idealerweise postest du alle Dateien (und wenn es nur Beispieldateien sind) die dein Problem widerspiegeln.

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 16:39

    Filefindfirstfile arbeitet nicht rekursiv.

  • AutoIt Cheat Sheet

    • Schnuffel
    • 20. Januar 2024 um 16:37

    hab einen kleinen Schönheitsfehler gefunden

    Funkti­ons­auf­rufe:
    _Print­Hel­lo(){

    die geschweifte Klammer ist dort zu viel.

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 15:39

    ich greife Alina mal vor... ^^ (nicht böse gemeint)

    Swiffer der Aufruf von cpdf sieht folgendermaßen aus:

    cpdf.exe 1.Datei(kann auch ein Pfad zu einem anderen Ordner sein) 2.Datei(kann auch ein Pfad zu einem anderen Ordner sein) Ausgabedatei(kann auch ein Pfad zu einem anderen Ordner sein)

    Ein Beispiel deine pdf zu durchsuchen kann so aussehen und müsste natürlich noch an deine Bedürfnisse angepasst werden:

    AutoIt: Beispiel in Dateien nach String suchen
    Local $sSearchString = "5000"
    Local $hSearch = FileFindFirstFile(@DesktopDir & "\*.pdf")
    If $hSearch = -1 Then
    	MsgBox(16, "", "Fehler: es wurde keine pdf-Datei gefunden.")
    	Exit
    EndIf
    Local $aFilename, $sFileName = "", $nFileCount = 0
    While 1
    	$sFileName = FileFindNextFile($hSearch)
    	If @error Then ExitLoop
    	$aFilename = FileReadToArray($sFileName)
    	For $i = 0 To UBound($aFileName) - 1
    		If StringInStr($aFileName[$i], $sSearchString) Then
    			ConsoleWrite($sFileName & @CRLF)
    			$nFileCount += 1
    		EndIf
    	Next
    WEnd
    FileClose($hSearch)
    If $nFileCount > 1 Then MsgBox(0, "", 'Der Suchbegriff '&$sSearchString&' wurde in ' & $nFileCount & ' Dateien gefunden!')
    Alles anzeigen

    ich denke damit kannst du erstmal selber weiter arbeiten.

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 12:27
    Zitat von Swiffer

    Zur Zeit nutze ich Nitro PDF Pro welches ich auch gerne weiter verwenden würde. Es besitzt die Option PDF zusammenzuführen.

    Die Frage wäre auch, ob dieses Programm eine Schnittstelle hat um es via Konsole mit Parametern zu befeuern.
    Viele pdf-Programme machen sowas nur in der Bezahlversion.

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 12:25

    hilfreich wäre für alle noch, in welchem pdf-Format du arbeitest.

    In neueren Formaten und in Streams wird die Suche schwieriger.

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 12:06

    zu Alinas exe:

    ein mutiger Start in der Konsole offenbart die Wahrheit: https://www.coherentpdf.com/

    mit cpdf.exe -help wird alles erklärt.

    ;)

  • Bestimmtes PDF automatisiert in ein anderes PDF einfügen und speichern

    • Schnuffel
    • 20. Januar 2024 um 11:53

    so wie ich das lese brauchst du eigentlich 2 voneinander getrennte Lösungen.

    1. mit AutoIt in einem vorgegebenen Verzeichnis nach einem Dateiinhalt suchen. (Ob der dann einmalig ist oder wie der referenziert wird ist Sache des Suchstrings)

    2. Die gefundene pdf-Datei mit einer anderen "mergen".

    Ich denke beide Probleme lassen sich mit AutoIt lösen.

  • revert im laufenden script.

    • Schnuffel
    • 20. Januar 2024 um 11:47

    mal als Beispiel, aber auch zur Warnung ;)

    AutoIt: Datei die kompiliert wird:
    Global $PfadzurAutoItExe = @AutoItExe ; oder die autoit3.exe einfach in den Scriptordner kopieren und darauf referenzieren
    Global $PadzumScript = @DesktopDir & '\test.a3x' ; kann eine .au3 Datei sein oder eine compilierte .a3x Datei. SO kann man nicht das Script im Klartext lesen
    Global $Timer = TimerInit()
    While 1
    	Run('"' & $PfadzurAutoItExe & '" "' & $PadzumScript & '"')
    	While TimerDiff($Timer) < 10000
    		Sleep(1)
    	WEnd
    	$Timer = TimerInit()
    WEnd
    Exit
    Alles anzeigen

    und als zweites ein Script, dass man jederzeit abändern kann, da es immer zum Aufruf geladen wird:
    Dies kann eine .au3 oder eine .a3x Datei sein.
    Bei zweiter ist die Datei "compiliert" und kann direkt nicht mehr ausgelesen werden.

    AutoIt: aufzurufendes Script
    MsgBox(64, "MsgBox", 'Diese MsgBox schließt sich automatisch nach 3 Sekunden', 3)
    Exit

    ABER: Ein Wort der Warnung ... :rofl:

    Diese Konstrukte funktionieren einwandfrei, solange man ein paar Dinge beachtet:

    - man kann nicht die kompilierte .exe als Wrapper für sein Script aufrufen. ==> ansonsten Todesschleife
    - man muss selber aufpassen, dass die Parameter für den Aufruf der Scriptdatei immer korrekt sind ==> ansonsten Todesschleife

    Daher würde ich auch für folgendes Konstrukt plädieren:
    Ähnlich dem Aufruf von Powershell Scripten einfach die AutoIt3.exe in die Aufgabenplanung packen und als Parameter die Scriptdatei übergeben.
    Der Aufruf erfolgt dann in der Aufgabenplanung zeitgesteuert und immer nur 1x.

    Das dahinterliegende Script kann jederzeit verändert werden. Zur nächsten Laufzeit wird es erneut eingelesen und verarbeitet.
    Ohne es geprüft zu haben...
    Die AutoIt3.exe wird dabei jedesmal mit einer neuen PID gestartet und kann somit einzeln und auch parallel oder nur überlappend ausgeführt werden.
    Die Beendigung eines aufgerufenen Scripts unterliegt ja eh der Hoheit des Programmierers.

  • revert im laufenden script.

    • Schnuffel
    • 19. Januar 2024 um 13:27

    starte doch einfach aus deinem Script heraus alle 4 Std. eine au3.

    Die kannst du jederzeit anpassen und die wird alle 4 Std. aufgerufen.

    Hängt aber alles davon ab, welche Sicherheit hergestellt werden soll, wer Zugriff auf Änderungen haben darf und und und ^^

    siehe (At its simplest: AutoIt3.exe myScript.au3 will run a standard AutoIt script 'myScript.au3' with no parameters.)
    https://www.autoitscript.com/autoit3/docs/intro/running.htm

  • Eingabe(such)feld mit Löschmöglichkeit

    • Schnuffel
    • 14. Januar 2024 um 11:54

    nachdem ich die erste Anforderung nicht vollständig gelesen hatte, hier noch eine Variante die dem Wunsch eher entspricht:


    AutoIt
    #include <GuiConstants.au3>
    $hGui = GuiCreate("Test", 260, 100)
    GUICtrlCreateLabel("", 15, 39, 230, 20, $SS_SUNKEN)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $hX = GUICtrlCreateLabel("X", 232, 39, 20, 18)
    GUICtrlSetFont(-1, 12, 0, 0, "Consolas")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor(-1, 0x9F2F2F)
    $hInput = GUICtrlCreateInput("", 20, 42, 205, 14, -1, $WS_EX_TOOLWINDOW)
    GUICtrlSetState(-1, 32)
    $hSuchen = GUICtrlCreateLabel('Suchen ...', 20, 42, 195, 16)
    GUICtrlSetState(-1, 16)
    GUICtrlSetColor(-1, 0xCFCFCF)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $hButton = GUICtrlCreateButton('OK',15,70, 120, 20)
    
    GUIRegisterMsg(0x0111, "WM_COMMAND_Suchen")
    GUISetState()
    While 1
       $Msg = GUIGetMsg()
       Switch $Msg
           Case -3
               Exit
       EndSwitch
    WEnd
    
    Func WM_COMMAND_Suchen($hWnd, $Msg, $wParam, $lParam)
        $nNotifyCode = BitShift($wParam, 16)
        $nID = BitAnd($wParam, 0x0000FFFF)
    	ConsoleWrite($nNotifyCode & @CRLF)
    
        Switch $nNotifyCode
    		Case 0
    			Switch $nID
    				Case $hSuchen
    					GUICtrlSetData($hInput, '')
    					GUICtrlSetState($hSuchen, 32)
    					GUICtrlSetState($hInput, 16 + 256)
    				Case $hX
    					GUICtrlSetData($hInput, '')
    					GUICtrlSetState($hSuchen, 16)
    					GUICtrlSetState($hInput, 32)
    			EndSwitch
        EndSwitch
    EndFunc
    Alles anzeigen
  • Eingabe(such)feld mit Löschmöglichkeit

    • Schnuffel
    • 14. Januar 2024 um 11:28

    hier mein Ansatz:


    AutoIt
    #include <GuiConstants.au3>
    $hGui = GuiCreate("Test", 260, 100)
    GUICtrlCreateLabel("", 15, 39, 230, 20, $SS_SUNKEN)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $hIcon = GUICtrlCreateIcon("shell32.dll", 15, 18, 41, 16, 16)
    $hInput = GUICtrlCreateInput("", 45, 42, 195, 14, -1, $WS_EX_TOOLWINDOW)
    GUICtrlSetState(-1, 32)
    $hSuchen = GUICtrlCreateLabel('Suchen ...', 45, 42, 195, 16)
    GUICtrlSetState(-1, 16)
    GUICtrlSetColor(-1, 0xCFCFCF)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $hButton = GUICtrlCreateButton('OK',15,70, 120, 20)
    
    GUIRegisterMsg(0x0111, "WM_COMMAND_KillFocus")
    GUISetState()
    While 1
       $Msg = GUIGetMsg()
       Switch $Msg
           Case -3
               Exit
       EndSwitch
    WEnd
    
    Func WM_COMMAND_KillFocus($hWnd, $Msg, $wParam, $lParam)
        $nNotifyCode = BitShift($wParam, 16)
        $nID = BitAnd($wParam, 0x0000FFFF)
        Switch $nNotifyCode
    		Case 0
    			IF $nID = $hSuchen Or $nID = $hIcon Then
    				GUICtrlSetState($hSuchen, 32)
    				GUICtrlSetState($hInput, 16 + 256)
    			EndIf
    		Case 512
    			IF $nID = $hInput Then
    				GUICtrlSetState($hSuchen, 16)
    				GUICtrlSetState($hInput, 32)
    			EndIf
        EndSwitch
    EndFunc
    Alles anzeigen
  • Eigene Verschlüsselungsroutine

    • Schnuffel
    • 12. Januar 2024 um 17:03

    alles gut :)

    du wolltest Meinung, und Meinung kann man schlecht über 2 Strings abgeben.

    Das ist alles.

    Du musst halt damit leben, dass deine Routine nie von außen Inspiration erfährt. ;)

  • Eigene Verschlüsselungsroutine

    • Schnuffel
    • 11. Januar 2024 um 18:08

    Naja,
    ein guter Verschlüsselungsalgorithmus ist Quelloffen und kann von jedermann auf Schwachstellen geprüft werden.

    Wenn du deinen Algorithmus nicht zeigen willst, bedeutet das,
    dass es kein zusätzliches "salt" gibt, dass die Individualisierung einer Verschlüsselung erzeugt.

    Damit können wir keinerlei Aussage treffen über die "Qualität" der Verschlüsselung.

    Zu der Hash-Collision von Gun-Food.
    Das Bedeutet, wenn man aus 2 verschiedenen Ausgangsstrings einen Hash erzeugt und beide Hashwerte identisch sind.
    Dann ist der Algorithmus der Hasherzeugung nicht ideal. siehe: https://en.wikipedia.org/wiki/Hash_collision

    Ich denke aber, dass du nicht einen Hash erzeugst, da dieser keine Möglichkeit gibt auf den Ursprungstext zurückzugreifen.

    Bei dir sieht das eher nach eine Verschiebung mit XOR aus und Wandlung in verschiedene Formate (Hex, Ascii, und Co.)
    Wäre schon mal interessant das zu sehen.

    Aber ist wie es ist. ;)

  • Icon verstecken (Systray)

    • Schnuffel
    • 10. Januar 2024 um 18:33

    soweit ich mich erinnere wurde die Taskbar in der UI Automation abgeändert/überführt.

    Schau dir mal folgende Ressource an: https://www.autoitscript.com/forum/topic/20…utomation-udfs/


    ach ja ....

    hier noch eine GUI, die dir alle Einträge anzeigt: https://www.autoitscript.com/forum/topic/19…ation-spy-tool/

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™