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. Oscar

Beiträge von Oscar

  • Seit wie vielen Stunden hocke ich heute am PC?

    • Oscar
    • 8. September 2016 um 05:27

    Irgendwie ist das ziemlich unnütz, erst die Daten in eine Datei zu speichern, diese wieder auszulesen und anschließend die Datei zu löschen.

    Das Gleiche erreicht man auch so:

    AutoIt
    #include <WinAPIMisc.au3>
    #include <WinAPISys.au3>
    MsgBox(64, "PC-Ontime v 1.0.0.0", "Computername: "& @ComputerName & @CRLF & "Benutzername: "& @UserName& @CRLF & "Akt. Datum: "& @MDAY &'.' & @MON &'.' & @YEAR & @CRLF & "PC OnTime: " & _WinAPI_StrFromTimeInterval(_WinAPI_GetTickCount()))
  • Prüfung einer Datei

    • Oscar
    • 7. September 2016 um 17:52
    Zitat von nwmbd

    Ich möchte wenn Person X / Programm Y etwas in eine Datei schreibt, dass PC Z eine MSGBOX erhält.

    Beschreib mal das Problem genauer!
    Wie viele Rechner sind da beteiligt? Wo liegen die Dateien? Wie viele Personen/Programme greifen da (gleichzeitig?) drauf zu?
    Welcher Rechner soll wann eine MsgBox erhalten? Und was soll da drin stehen?

    Es gibt da nämlich einen schönen Befehl "_WinAPI_ShellChangeNotifyRegister", womit man ein Verzeichnis überwachen kann.

  • Reguläre Ausdrücke

    • Oscar
    • 7. September 2016 um 17:41

    Eine Variante mit StringRegExp:

    AutoIt
    #include <Array.au3>
    $sText = FileRead(@ScriptDir & '\Neues Textdokument 2.0.txt')
    $aNew = StringRegExp($sText, '(?s)(\d+=geliefert)', 3)
    _ArrayDisplay($aNew)
  • BUG ??? File Read nach Script breaking Changes Version 3.3.14.2

    • Oscar
    • 4. September 2016 um 08:58

    Wenn Du AutoIt "raten" lässt (ohne Angabe des Dateiformats), um welches Dateiformat es sich handelt, so kann das schonmal schief gehen.
    Bei einer reinen ASCII-Datei mag das ja noch klappen, aber sobald eine Zeichenkonvertierung ins Spiel kommt, würde ich immer mit FileOpen und dem Handle arbeiten.

  • ERLEDIGT --> Raspberry Pi® 2 Model B Advanced-Set 1 GB

    • Oscar
    • 26. August 2016 um 15:00
    Zitat von Alina

    Lötpumpe und Lötband (saugt das irgendwie auf und heißt anders aber Name vergessen)

    Nur der Vollständigkeit halber:
    - Entlötsaug-Pumpe
    - Entlötsaug-Litze

    Ich bevorzuge die Pumpe.
    Wichtig ist beim löten, dass die Lötstelle anschließend schön silbern glänzt.
    Sieht die Lötstelle hingegen matt aus, handelt es sich sehr wahrscheinlich um eine "kalte" Lötstelle (leitet nicht korrekt/Wackelkontakt).

  • Funktion "_RecursiveFileListToArray" auf mehere Laufwerke ausweiten - aber wie? (ANFÄNGER)

    • Oscar
    • 25. August 2016 um 18:06

    Naja, es geht schon einfacher, weil meine Funktion auch die Rückgabe als String zulässt und man so erstmal alles in einen String einlesen und am Schluß dann das Array erstellen lassen kann.
    Hier mal als Beispiel:

    AutoIt
    #include <Array.au3>
    Global $sFiles = '', $aFiles
    Global $iTimer = TimerInit()
    Global $aDrives = DriveGetDrive('FIXED')
    If Not @error Then
    	For $i = 1 To $aDrives[0]
    		ToolTip('Lese Laufwerk: "' & $aDrives[$i] & '" - Bitte warten...')
    		$sFiles &= _RecursiveFileListToArray($aDrives[$i], '.*', 1, 0)
    	Next
    	$aFiles = StringSplit(StringTrimRight($sFiles, 2), @CRLF, 1)
    EndIf
    ConsoleWrite('Zeit (ms): ' & TimerDiff($iTimer) & @CR)
    ToolTip('')
    _ArrayDisplay($aFiles)
    
    
    
    
    ;===============================================================================
    ; Function Name:   _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $fRecursion][, $sDelim])
    ; Description::    gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
    ; Parameter(s):    $sPath = Startverzeichnis
    ;                  $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ;                  $iFlag = Auswahl
    ;                           0 = Dateien & Verzeichnisse
    ;                           1 = nur Dateien
    ;                           2 = nur Verzeichnisse
    ;                  $iFormat = Rückgabeformat
    ;                             0 = String
    ;                             1 = Array mit [0] = Anzahl
    ;                             2 = Nullbasiertes Array
    ;                  $fRecursion = Verzeichnisse rekursiv durchsuchen
    ;                                False = Nein
    ;                                True = Ja
    ;                  $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s):  AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s):       Oscar (www.autoit.de)
    ;                  Anregungen von: bernd670 (www.autoit.de)
    ;                             und: AspirinJunkie (www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '.*', $iFlag = 0, $iFormat = 1, $fRecursion = True, $sDelim = @CRLF, $fOpenDLL = True)
    	Local $hSearch, $sFile, $sReturn = '', $aD
    	Local Static $hDll
    	If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    	$hSearch = FileFindFirstFile($sPath & '*')
    	If Not @error And $hSearch <> -1 Then
    		If $fOpenDLL Then $hDll = DllOpen('kernel32.dll')
    		While True
    			$sFile = FileFindNextFile($hSearch)
    			If @error Then ExitLoop
    			If @extended Then
    				$aD = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile)
    				If @error Or BitAND($aD[0], 0x400) Then ContinueLoop
    				If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    				If $fRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, True, $sDelim, False)
    				ContinueLoop
    			EndIf
    			If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    		WEnd
    		FileClose($hSearch)
    		If $fOpenDLL Then DllClose($hDll)
    	EndIf
    	If $iFormat = 2 Then $iFormat = 3
    	If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    	If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    	Return $sReturn
    EndFunc
    Alles anzeigen

    Wichtiger Hinweis: _ArrayDisplay zeigt nur die ersten 65525 Einträge an. Es sind aber alle Dateien im Array enthalten!

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • Oscar
    • 24. August 2016 um 17:39

    Auf meinem PC sind's 30 FPS.

    CPU: Intel Core i5-4690 @ 3.5 GHz
    GPU: AMD Radeon HD 5770

  • Texte aus verschiedenen Quellen auslesen?

    • Oscar
    • 24. August 2016 um 05:25

    Das war's bestimmt nicht!
    Welches Programm? Welcher Text? Welche Internetseite? Wo ist Dein Script?

  • UDF - TrueType Fonts im Script mitgeben und verwenden

    • Oscar
    • 22. August 2016 um 17:31

    Wobei man für die aktuelle AutoIt-Version bei der au3-Datei einige Änderungen vornehmen muss:

    - die Funktionen "_WinAPI_RemoveFontMemResourceEx" und "_WinAPI_AddFontMemResourceEx" auskommentieren.
    - die Variable "$ghGDIPDll" gegen "$__g_hGDIPDll" austauschen.

  • Frage an alle Raspberry Pi & Co - Bastler

    • Oscar
    • 22. August 2016 um 13:38

    Ein RasPi ist dafür sowieso Overkill.
    Ein "Arduino Nano" zum Beispiel würde völlig reichen oder (wegen Netzwerk und wenn WLAN ok ist) lieber einen ESP8266.
    Ansonsten gibt es für den Arduino auch Netzwerk-Module.

  • If NOT über variable

    • Oscar
    • 14. August 2016 um 19:19

    Lottich: Du musst Dich gar nicht angegriffen fühlen. Deine "Lösung" mit Switch...Case könnte durchaus viel besser sein.

    Es geht in erster Linie gegen den TE, der nicht in der Lage ist, das eigentliche Problem zu schildern. Wir raten und basteln an seinem Beispiel herum.
    Ich denke aber, dass das eigentliche Problem viel einfacher zu lösen wäre, wenn wir es denn jemals erfahren werden...
    Jedenfalls habe ich bei meinen Programmen noch nie ein "geschaltetes NOT" benötigt. Mir fällt auch kein Anwendungsfall dafür ein.
    Schon allein deswegen würde mich das eigentliche Problem interessieren.

  • If NOT über variable

    • Oscar
    • 14. August 2016 um 08:51

    Das ist doch mal wieder das typische X-Y-Problem!
    Hier wird an Y herumgedoktert ohne das X zu kennen.
    So nebenbei ist auch die Abfrage der Checkboxen falsch.
    Aber macht ruhig so weiter...

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 10. August 2016 um 05:17
    Zitat von bazii

    jedoch hätte ich Dir selbst auch gerne eine kleine Summe für Deine Mühe überwiesen.

    Das ist nicht nötig!
    Ich programmiere gern in AutoIt und solche kleinen Programme sind dann eine gute Übung.
    Deine Spende an das Forum ist als Gegenleistung völlig ausreichend. Davon profitiere ich indirekt (durch den Erhalt dieses Forums) ja auch.

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 9. August 2016 um 20:06

    So, ich habe das Programm fertig (siehe Anhang)! :)
    Das ist jetzt gleich ein komplettes Programm geworden (inkl. GUI). Das Script ist auch vollständig kommentiert.
    Du musst noch die Quell- und Zielverzeichnisse anpassen!
    Und weil Du es ja auf der Arbeit einsetzen willst, wäre es schön, wenn Du als Gegenleistung dem Forum eine Spende zukommen lassen könntest.

    Dateien

    NetWorkCopy.au3 8,96 kB – 326 Downloads
  • If NOT über variable

    • Oscar
    • 9. August 2016 um 05:21
    Zitat von Lanealine

    kennt jemand eine andere lösung ?

    Eine andere Lösung, wofür?
    Deine obigen Codezeilen ergeben keinen Sinn. Was willst Du erreichen?

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 8. August 2016 um 19:29

    Heute habe ich keine Zeit mehr dafür!
    Vielleicht morgen. Falls nicht jemand anderes sich findet. ;)

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 8. August 2016 um 18:54
    Zitat von bazii

    Ist der Rest vom Code soweit ok oder sollte ich noch etwas berücksichtigen?

    Nein, so wird das nichts! Du kannst dort nicht einfach Quell- und Zielverzeichnis eintragen.
    Du musst alle Dateien im Quellverzeichnis einlesen und dann in einer Schleife einzeln überprüfen, ob sie "in Benutzung" sind.
    Wenn "nein", dann kopieren/verschieben. Wenn "ja", dann erst beim nächsten (nach 2 Minuten) Schleifendurchlauf bearbeiten.
    Es muss also zwei ineinander verschachtelte Schleifen geben. Die äußere ist die "Zeitschleife" und die innere bearbeitet alle Dateien im Quellverzeichnis.

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 8. August 2016 um 18:17

    Wie soll denn der Teil nach der While-Schleife ausgeführt werden?

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 8. August 2016 um 09:05

    Für das löschen nach X Tage habe ich mal eine Funktion geschrieben:

    AutoIt
    #include <Date.au3>
    
    
    _FileDeleteAfterXDays('c:\Temp\', 10) ; alle Dateien in "c:\temp\", die älter als 10 Tage sind, löschen.
    
    
    ;===============================================================================
    ; Function Name:   _FileDeleteAfterXDays($sPath, $iDays[, $bForceDel][, $bRek][, $bDirDel][, $bLog])
    ; Description::    löscht Dateien in einem ausgewähltem Verzeichnis (rekursiv)
    ;                  nach einer angegebenen Anzahl von Tagen
    ; Parameter(s):    $sPath = Verzeichnis, aus dem die Dateien gelöscht werden sollen.
    ;                  $iDays = Dateien, die älter als $iDays (in Tagen) sind, löschen.
    ;                  $bForceDel = wenn "True" werden auch Dateien/Verzeichnisse gelöscht,
    ;                               die gegen löschen geschützt sind ("R"-Attribut)
    ;                  $bRek = wenn "True" wird das Verzeichnis rekursiv (inkl. Unter-
    ;                          verzeichnisse) durchsucht.
    ;                  $bDirDel = wenn "True" wird das Unterverzeichnis gelöscht, wenn
    ;                             es (aufgrund der Löschaktion) leer ist.
    ;                  $bLog = wenn "True" wird das Ergebnis der Löschaktion in die
    ;                          Console geschrieben.
    ; Requirement(s):  AutoIt-Version v3.3.14.2
    ;                  #include <Date.au3>
    ; Return Value(s): bei Erfolg Rückgabe = 1
    ;                  bei Fehler Rückgabe = 0
    ;                  und @error:
    ;                  1 = $iDays ist keine oder eine negative Zahl
    ;                  2 = Das übergebene Verzeichnis existiert nicht oder ist leer.
    ; Author(s):       Oscar (www.autoit.de)
    ;                  Micha_he (www.autoit.de)
    ;===============================================================================
    Func _FileDeleteAfterXDays($sPath, $iDays, $bForceDel = False, $bRek = False, $bDirDel = False, $bLog = True)
    	Local $hSearchm, $hEmpty, $sFile, $sDate, $iRet
    	If (Not IsNumber($iDays)) Or ($iDays < 0) Then Return SetError(1, 0, 0)
    	If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    	$hSearch = FileFindFirstFile($sPath & '*.*')
    	If @error Then Return SetError(2, 0, 0)
    	While 1
    		$sFile = FileFindNextFile($hSearch)
    		If @error Then ExitLoop
    		If @extended Then
    			If $bRek Then
    				_FileDeleteAfterXDays($sPath & $sFile, $iDays, $bForceDel, $bRek, $bDirDel, $bLog)
    				If $bDirDel Then
    					$hEmpty = FileFindFirstFile($sPath & $sFile & '\*.*')
    					If @error Then
    						If $bForceDel Then FileSetAttrib($sPath & $sFile, '-R')
    						$iRet = DirRemove($sPath & $sFile)
    						If $bLog Then ConsoleWrite('Folder "' & $sPath & $sFile & '" deleted = ' & ($iRet ? 'yes' : 'no') & @CR)
    					EndIf
    					FileClose($hEmpty)
    				EndIf
    			EndIf
    		Else
    			$sDate = StringRegExpReplace(FileGetTime($sPath & $sFile, 0, 1), '(\d{4})(\d{2})(\d{2})(.*)', '$1/$2/$3')
    			If _DateDiff('D', $sDate, _NowCalc()) > $iDays Then
    				If $bForceDel Then FileSetAttrib($sPath & $sFile, '-R')
    				$iRet = FileDelete($sPath & $sFile)
    				If $bLog Then ConsoleWrite('File "' & $sPath & $sFile & '" deleted = ' & ($iRet ? 'yes' : 'no') & @CR)
    			EndIf
    		EndIf
    	WEnd
    	FileClose($hSearch)
    	Return 1
    EndFunc   ;==>_FileDeleteAfterXDays
    Alles anzeigen


    Zu "_WinAPI_FileInUse": Den Befehl musst Du doch nur in einer If-Anweisung vor FileCopy benutzen:
    If Not _WinAPI_FileInUse($sSource) Then FileCopy($sSource, $sDest)

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 7. August 2016 um 19:57
    Zitat von bazii

    Den abteillungsweise Netzwerkordner alle 30 Tage leeren ab Scriptstart habe ich noch keine Idee. Event. wisst ihr wie das gehen könnte.

    Die Dateien bekommen doch automatisch ein Erstellungsdatum. Somit einfach alle Dateien, die älter sind als 30 Tage löschen.


    Zitat von bazii

    Wie kann ich bwerkstelligen, dass erst dann, wenn die Scandatei im Verteiler-PC fertiggestellt ist, in den Abteilungsordner verschoben und dem Benutzer sichtbar angezeigt wird.

    Diese Dateien sind "in Benutzung" (es liegt ein Datei-Lock darauf).
    Das kannst Du mit "_WinAPI_FileInUse" abfragen und nur wenn die Datei nicht mehr "in Benutzung" ist, lässt Du die Datei kopieren/verschieben.

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™