Ich hatte dazu auch mal eine Funktion erstellt.
_GuiCtrlListView_MoveItem
Beiträge von BugFix
-
-
Ab sofort findet ihr ein SciTE Archiv in H&U - angepinnt.
-
Hallo,
da es ja kein offizielles Archiv für SciTE4AutoIt gibt, habe ich mal alles, was ich bei mir gefunden habe in einem Online-Archiv zusammengestellt.
Falls ihr noch andere Versionen habt, lasst sie mir bitte zukommen, ich lade diese dann mit rauf. -
falscher Zeichensatz?
Wenn in einem UTF8-Editor Umlaute geschrieben werden ( rynow nutzt SublimeText mit UTF8 ) wirst du in SciTE das falsch dargestellt bekommen.
Obwohl SciTE problemlos UTF8 kann und damit 99% aller Darstellungen abgedeckt wären, hat Jos das nicht als Standard implementiert. Und somit hat man extreme Probleme, wenn man in SciTE erstellte Skripte in UTF8-Editoren öffnet und umgekehrt. -
Da gibts doch meist mehrere Download-Button
Genau so wars. Zumindest war hier aber ein DL-Button der dann auch das gewünschte enthielt. Sehr häufig findet man auf den Webseiten nur DL-Links für "Free-Download" von Unbedingt-You-Must-Have-Treiber-Scans.
Mit viel Glück ist dann tatsächlich auf der 25.ten Sub-Site im Kleingedruckten der Link zum eigentlichen Produkt, weswegen Tante Google diese Webseite ausgewählt hatte. 
-
Pooh, File-Upload ist ja eine echte Malwareschleuder. Mit jedem Download ist die Datei mit anderer Malware infiziert.
Da wird die Datei gleich beim Download vom AV-Programm gekillt.Aha, der blaue DL-Button funktioniert. - Sehr seltsam. - Danke.
-
"02/28/2010" klingt super. Nehme das Angebot an.
Ich habe keine Ahnung, warum auf Win2K die 2011-Version nicht startet. Im Moment habe ich die mit 3.3.8.1 kommende Lite-Version bei. Da diese aber kein SciTE-Startup Skript hat (und auch auf keines reagiert), kann man auch keine Lua-basierten Tools laden. Ein nachträgliches Aufpeppen auf SciTE4AutoIt-Funktionalität geht somit in die Hose.@Micha_he
Kannst die v1.79 auch gerne anhängen. Vielleicht sucht ja nochmal wer anders und dann sind hier mehrere Versionen verfügbar. -
Danke Raupi, aber die Version ist schon zu neu und startet nicht auf Win2K (keine zulässige Win32 Anwendung)
-
Hi,
ich habe leider nicht alle meine Sticks dabei und muss hier auf einem Win2k-Rechner ein SciTE4AutoIt installieren.
Es gibt zwar ein Archiv für alte AutoIt-Versionen, aber keines für SciTE.Ich brauche die Version 1.79 (2009) oder die darauf folgende (2.23 oder so, mit AutoIt v.3.3.8.1).
Falls ihr das noch rumliegen habt, bitte mal posten - Danke.
-
Kleine Korrektur zurück: FileGetLongName kann doch nicht verwendet werden, da die Funktion nicht mit UNC-Pfaden umgehen kann. (s. Post 1)
-
Ich habe zumindest mal schon eine Lösung gefunden, wie ich verhindere, dass mehrfache Drucke eines Dokuments (z.B. bei Änderungen am Dokument) das Original vernichten. Die neue Version von 7-Zip (9.38 beta) beinhaltet eine Rename-Funktion. Existiert eine Datei im Archiv, lese ich das Erstellungsdatum der Datei aus und benenne diese um zu Name_Datum.Erweiterung.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Global $7z = @ScriptDir & '\7ZipCmdLine\7z.exe' ; v9.38 beta (rn - command)$sArchiv = @ScriptDir & '\archiv_1.zip'
[/autoit] [autoit][/autoit] [autoit]
$sFile = @ScriptDir & '\Test\test.pdf'_AddToArchive($sArchiv, $sFile) & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Func _AddToArchive($sArchive, $sFile)
[/autoit] [autoit][/autoit] [autoit]
Local $sCmd, $iPID
; prüfen ob Datei schon im Archiv vorhanden, falls Archiv existiert
; wenn ja umbenennen zu: 'name_DATUMZEIT.erweiterung'
If FileExists($sArchive) Then
Local $aContent = _GetContentArchive($sArchive)
Local $sFileNameOld = StringTrimLeft($sFile, StringInStr($sFile, '\', 0, -1))
Local $sFileNameNew = ''
For $i = 0 To UBound($aContent) -1
If $aContent[$i][1] = $sFileNameOld Then
Local $sBase = StringLeft($sFileNameOld, StringInStr($sFileNameOld, '.', 0, -1)-1)
Local $sExt = StringTrimLeft($sFileNameOld, StringLen($sBase))
$sFileNameNew = $sBase & '__' & $aContent[$i][0] & $sExt
ExitLoop
EndIf
Next
If $sFileNameNew <> '' Then
$sCmd = '"' & $7z & '" rn "' & $sArchive & '" "' & $sFileNameOld & '" "' & $sFileNameNew & '"'
$iPID = Run($sCmd, '', @SW_HIDE)
ProcessWaitClose($iPID)
EndIf
EndIf
$sCmd = '"' & $7z & '" a -tzip -mx=0 "' & $sArchive & '" "' & $sFile & '"'
$iPID = Run($sCmd, '', @SW_HIDE);, 0x2)
Return ProcessWaitClose($iPID)
EndFuncFunc _GetContentArchive($sArchive)
[/autoit]
Local $sPattern = "(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\s\.{4}A(?:\s+\d+){2}\s+([^\r\n]+)"
Local $sCmd = '"' & $7z & '" l "' & $sArchive & '"'
Local $iPID = Run($sCmd, '', @SW_HIDE, 0x2) ; 0x2 = $STDOUT_CHILD
ProcessWaitClose($iPID)
Local $aContent = StringRegExp(StdoutRead($iPID), $sPattern, 3)
Local $aOut[UBound($aContent)/2][2], $ii = 0
For $i = 0 To UBound($aContent) -2 Step 2
$aOut[$ii][0] = StringRegExpReplace($aContent[$i], '[- :]', '')
$aOut[$ii][1] = $aContent[$i+1]
$ii += 1
Next
Return $aOut
EndFunc -
Leichenschänder!!
Hast du mal auf das Datum des letzten Posts geachtet:
Zitat22. Juli 2013

-
Folgendes Szenario:
Eine Anwendung generiert Ausdrucke automatisch als PDF. Dazu bekommt das Dokument als Name: Typ + Belegnummer (z.B. "VAN1002003.pdf" für Verkauf Angebot Nr. 1002003). Ich möchte nun gerne auf den Druckbefehl reagieren und die PDF mit zusätzlichen Informationen umbenennen (KDNr_TypBelegNr_Timestamp.pdf). Diese zusätzlichen Infos stehen nur im Moment des Druckauftrages zur Verfügung, danach wechselt der User auf einen anderen Kunden.
Ich stelle mir also folgendes Vorgehen vor:
- Druckbefehl?
- Zusatzinfo auslesen (Kundennummer)
- Typ und Belegnummer auslesen
- warten bis "TypBelegnummer.pdf" existiert
- umbenennen
Ich könnte permanent mit FileExist das Zielverzeichnis abfragen, würde aber lieber direkt auf das Druck-Event reagieren.
Den Start des Druckbefehls kann ich hoffentlich mit etwas Gefrickel über die Existenz des Druckdialogs abfragen. Wobei das schon ziemlich abenteuerlich ist, da die Anwendung nur ein einziges echtes Fenster besitzt. Alles andere sind Delphi-Controls. Aber die Existenz alleine darf den Prozeß nicht auslösen, der User kann ja evtl. auch nur in die Druckvorschau gehen und dann abbrechen. Ich brauche also das wirkliche Event "Signal an Drucker" und dann auch "Druck beendet".
Weiß jemand auf welche Events ich da lauschen muss?
Ich vermute, dass ich dort mit einem Hook ansetzen muss. -
Mir ist gerade noch ein anderer Gedanke gekommen:
Da ich zentral alle Dokumente gemeinsam speichere ist das Taggen zum Zwecke des Auffindens nicht so sehr vordergründig, eigentlich wollte ich damit nur die Zusammengehörigkeit bestimmter Dokumente markieren. Alle Dokumente besitzen einen eindeutigen Zusammengehörigkeitsschlüssel: die Kundennummer. Da wäre es doch eigentlich eine simple Lösung einen Zip-Container mit der Kundennummer zu erstellen und dann Dokumente jeder Art mit Bezug zu dem Kunden dem Archiv hinzuzufügen. Da Speicherplatz heutzutage nicht das Problem ist, werde ich mal testen ob ich die Daten unkomprimiert in einer Zip-Datei verstauen kann. Dann habe ich eine bessere Performance beim Lesen, da ein "Entpacken" nicht wirklich stattfindet.Was meint ihr dazu?
-
Ich schildere mal kurz die Situation:
In unserem Archiv lagern Unmengen an Dokumenten (Angebote, Lieferscheine, Rechnungen etc.). Aufgrund der gesetzlichen Aufbewahrungsfristen gehen zwar pro Jahr etwa 20.000 Blatt in den Schredder aber 30.000 kommen hinzu. Und der Platz ist begrenzt.
Da der Gesetzgeber zum Glück erkannt hat, dass das Aufbewahren von Papier-Originalen schwachsinnig ist, darf man ja auch die Dokumente in elektronischer Form aufbewahren. Das Scannen der Daten von 10 Jahren werden wir wohl an einen externen Dienstleister abtreten (da würde man selbst bestimmt ein Jahr für brauchen
).
Die ganzen Dateien müssen dann natürlich auch sinnvoll auffindbar sein. Ein Tagging zusammengehöriger Dateien ist also sinnvoll (von Anfrage über Angebot, Auftrag, Auftragsbestätigung zu Lieferschein und Rechnung). Wie ich das für die Altdaten realisieren kann, ist mir noch nicht so klar, aber das ist auch ein zweitrangiges Problem.
Das Hauptproblem gestaltet sich für mich folgendermassen:
Gibt es eine Tagging-Software, die portabel ist, die ich also mit den Daten transportieren kann? Bisher gefunden habe ich z.B. ISAKS - ist soweit auch eine tolle Sache, aber leider an ein Serversystem gebunden.
Ich benötige eine Verschlagwortung der Dateien, die im Root des Datenspeichers liegt. Dann kann ich mit einer Kopie der Daten vom Root sowohl Daten als auch Tagging sichern und (was noch wichtiger ist) in jeder Sicherung das Tag-System verwenden ohne an den Server gebunden zu sein.
Der Punkt ist deshalb wichtig, weil z.B. bei Kontrollen durch das Finanzamt dem Kontrolleur die Daten zur Verfügung zu stellen sind. Ich bin zwar nicht verpflichtet ihm eine Software zur Verfügung zu stellen, die es ihm erleichtert die Daten aufzufinden. Aber wenn du ihm nur ein USB-Laufwerk in die Hand drückst und sagst: "Da ist alles drauf", und er sich dann durch die Verzeichnisse und Dateien wühlen darf, ist sehr fraglich, ob bei auftretenden Problemen der Beamte dann seinen Prüfungsspielraum zu deinen Gunsten auslegt. Sagst du ihm aber: "Öffnen Sie die Suchsoftware und geben Begriffe ein, alle relevanten Belege werden dann aufgelistet", ist er zum einen schneller fertig
und wird evtl. auch entgegenkommender sein.
Wie wird das bei euch so gehandhabt? Könnt ihr mir etwas empfehlen? Wenn möglich soll keine Vorschrift für das verwendete Dateisystem bestehen. (auf meinem NAS läuft kein NTFS sondern ein Linux FS)
Bin dankbar für jede Idee. -
Aber du hast noch nicht verstanden, was ich meinte: Warum willst du auf Text aus einer Datei zugreifen? Greif doch direkt die Daten des Chats über TCP oder UDP oder was auch immer der Chat nutzt ab. Lausche auf Stichwörter im Netztraffic und reagiere darauf, wie mein IRC-Chat-Bsp.. Und vor allem sende Nachrichten dann auf demselben Weg und nicht durch Senden von Text an irgendwelche Inputs.
-
das chatprotokoll auf einem server oder ähnliches, sondern im ordner users/benutzer/dokuments
Da hast du mich missverstanden. Chatprotokoll ist das Reglement, wie die Teilnehmer kommunizieren.
z.B. welcher Port genutzt wird, mit welchen Befehlen der alive-Status geprüft wird (bei IRC: sende Ping, empfange Pong) usw. usf.
-
Du kannst Dir das #include und _WinAPI_GetFullPathName sparen, wenn Du stattdessen FileGetLongName mit Flag 1 verwendest
Danke für den Tipp, wird sofort geändert. -
Bitte lies das Bsp. zu GUICtrlCreateMenu in der Hilfe, da wird dir alles gezeigt.
NB. Ein Case ohne Switch oder Select? Und dann noch nach dem Programmende (Exit) ....
-
Ich weiß nicht, wie es euch geht, aber ich finde einen Zugriff auf Elemente über Namen recht angenehm.
Mit der aktuellen AutoIt-Version können wir ja Inhalte von Strukturen mit Punktnotation der Feldnamen abfragen.
Somit habe ich mal eine Pfadfunktion erstellt, die einen Pfad splittet und Zugriff auf die einzelnen Elemente per Namen erlaubt. Dabei wird der Pfad auch noch in Normalform gewandelt (einheitlich Backslash, relative Adressen werden in absolute Adressen gewandelt). Es können Laufwerksbasierte absolute Pfade, relative Pfade oder UNC-Pfade angegeben werden._Path
AutoIt
Alles anzeigen$path = _Path(@ScriptFullPath) ConsoleWrite('kpl. Pfad ' & $path.FullPath & @CRLF) ConsoleWrite('Laufwerk ' & $path.Drive & @CRLF) ConsoleWrite('Ordner ' & $path.Dir & @CRLF) ConsoleWrite('Dateiname ' & $path.File & @CRLF) ConsoleWrite('Name Erweiterung ' & $path.Ext & @CRLF) ConsoleWrite('Datei mit Erweiterung ' & $path.FileExt & @CRLF) ; oder direkt nur ein Parameter: ConsoleWrite('Dateiname ' & _Path(@ScriptFullPath).File & @CRLF) ;=============================================================================== ; Function Name....: _Path ; Description......: Splittet eine Pfadangabe in einzelne Bestandteile ; Parameter(s).....: $sPath Pfadangabe, Lw-basiert oder UNC, absolut oder relativ - alles möglich ; .................: Pfad kann Laufwerk od. Laufwerk mit Ordner od. Lw/Ordner/Datei.suffix sein ; .................: Pfad wird nicht auf Existenz geprüft ; Return Value(s)..: Struktur mit den Feldern: ; .................: .FullPath Der kpl. Pfad in Normalform ; .................: .Drive Das Laufwerk (ohne Backslash), bei UNC-Pfad der Hostname ; .................: .Dir Das Verzeichnis (ohne endenden Backslash) ; .................: .File Der Dateiname ; .................: .Ext Der Name der Erweiterung ; .................: .FileExt Dateiname.Erweiterung ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] ) ;=============================================================================== Func _Path($sPath) ; relative Adressierung ('\' od. '/', '.', '..') möglich Local $sDrive, $sDirFile, $sDir, $sFile, $sExt, $sFileExt, $sTmp $sPath = DllCall('kernel32.dll', 'dword', 'GetFullPathNameW', 'wstr', $sPath, 'dword', 4096, 'wstr', '', 'ptr', 0)[3] Select Case StringLeft($sPath, 2) = '\\' $sDrive = StringLeft($sPath, StringInStr($sPath, '\', 0, 3)) Case StringRegExp($sPath, '^[a-zA-Z]:') $sDrive = StringLeft($sPath, 3) EndSelect $sDirFile = StringTrimLeft($sPath, StringLen($sDrive)) $sDir = StringLeft($sDirFile, StringInStr($sDirFile, '\', 0, -1)) $sTmp = StringTrimLeft($sDirFile, StringLen($sDir)) $sFileExt = StringInStr($sTmp, '.') ? $sTmp : '' If $sFileExt = '' Then $sDir = $sDirFile $sFile = ($sFileExt <> '') ? StringLeft($sFileExt, StringInStr($sFileExt, '.', 0, -1) -1) : '' $sExt = ($sFileExt <> '') ? StringTrimLeft($sFileExt, StringLen($sFile) +1) : '' Local $tPath, $tagPath = 'struct;' & _ 'char FullPath[' & StringLen($sPath) & '];' & _ 'char Drive[' & StringLen($sDrive) & '];' & _ 'char Dir[' & ((StringLen($sDir) > 0) ? StringLen($sDir) : 1) & '];' & _ 'char File[' & ((StringLen($sFile) > 0) ? StringLen($sFile) : 1) & '];' & _ 'char Ext[' & ((StringLen($sExt) > 0) ? StringLen($sExt) : 1) & '];' & _ 'char FileExt[' & ((StringLen($sExt) > 0) ? (StringLen($sFile)+StringLen($sExt)+1) : 1) & '];' & _ 'endstruct' $tPath = DllStructCreate($tagPath) DllStructSetData($tPath, 1, StringRegExpReplace($sPath, '\\$', '')) DllStructSetData($tPath, 2, StringRegExpReplace($sDrive, '\\$', '')) DllStructSetData($tPath, 3, StringRegExpReplace($sDir, '\\$', '')) DllStructSetData($tPath, 4, $sFile) DllStructSetData($tPath, 5, $sExt) DllStructSetData($tPath, 6, $sFileExt) Return $tPath EndFunc ;==>_PathEdit:
Eine kleine Rolle rückwärts. FileGetLongName kann ausschliesslich relative Pfade auflösen. Bei der Darstellung von UNC-Pfaden (z.B. //host/share/folder/file.ext) gehts in die Hose.Also es bleibt dabei, _WinAPI_GetFullPathName ist notwendig. Kann man aber auch ohne Include durch direkten Aufruf der Dll abfragen.