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

Beiträge von Micha_he

  • Ältere Ordner löschen

    • Micha_he
    • 25. Februar 2015 um 13:29
    Zitat von Kanashius

    Die müssen nämlich gelöscht werden, bevor der Ordner gelöscht werden kann. Es können keine Ordner mit Inhalt gelöscht werden.

    Wozu hat dann der Befehl DirRemove() einen zweiten Parameter (den ich ja prinzipbedingt nicht verwenden kann) ?

    Der Hintergrund war einfach der, erst sollten eigenlich nur alte Dateien entfernt werden, dann später auch rekursiv.
    Nun blieben immer die leeren Ordner liegen. In meinem Fall, wusste ich ja im Vorfeld nicht, was die Benutzer in dem Ordner anlegen !
    Also habe ich später eben diese leeren Ordner entfernen lassen. Das einmal jemand Interesse an den 'leeren Ordnern' haben könnte, hatte ich nicht bedacht ;)

  • Ältere Ordner löschen

    • Micha_he
    • 25. Februar 2015 um 12:52

    Versuch mal diese Funktion. Änderung: Leere Ordner werden nur gelöscht, wenn auch deren Alter älter wie die angegebene Anzahl Tage ist.

    Spoiler anzeigen
    [autoit]

    Func _FileDeleteAfterXDays($sPath, $iDays, $bForceDel = False, $bRek = True, $bDirDel = True, $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
    $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 = DirRemove($sPath & $sFile)
    If $bLog Then ConsoleWrite('Delete Folder "' & $sPath & $sFile & '" = ' & StringMid('No Yes', $iRet * 3 + 1, 3) & @CR)
    EndIf
    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('Delete File "' & $sPath & $sFile & '" = ' & StringMid('No Yes', $iRet * 3 + 1, 3) & @CR)
    EndIf
    EndIf
    WEnd
    FileClose($hSearch)
    Return 1
    EndFunc

    [/autoit]
  • Ältere Ordner löschen

    • Micha_he
    • 25. Februar 2015 um 12:18

    Welcher 'gesamte Ordner' ? 'C:\Temp\Backup' oder '..\Backup_xx.xx.xx' ?

    Du startes Dein Script wie du es oben geschrieben hast auf den Ordner 'C:\Temp\Backup'.
    Das Script sollte nun alle Dateien 'rekursiv' löschen, die älter wie 5 Tage sind. Und sind anschließend die Ordner leer, werden auch die Ordner entfernt, da $bDirDel standardmäßig auf TRUE steht.

    Wenn Du den 2. Parameter weg lässt (oder auf False setzt) werden nur Dateien im angegebenen Verzeichnis beachtet und ggf. gelöscht und da liegt ja in Deiner Struktur keine 'Datei' ! Der im 1. Parameter angegebene Ordner bleibt immer bestehen !

  • Ältere Ordner löschen

    • Micha_he
    • 25. Februar 2015 um 11:30

    Du schreibst ja nicht, was passiert (oder nicht passiert). Also kann ich nur raten:

    Die Funktion löscht nach dem Alter der Dateien in den Verzeichnissen, nicht nach irgendwelchen Bezeichnungen. Zum Test muss du also das Änderungsdatum der Datei passend setzen (falls Du die Struktur z.B. heute erzeugst).

    Habe die Funktion gerade nochmal geprüft. Tut es noch.
    Beim Einfügen Deines Beispiels, sind aber einige (lange) Zeilen (51, 63) getrennt worden. Achte in Deinem Original darauf.

    Außerdem muss Du die Funktion mit '_FileDeleteAfterXDays($Server, $Tage, True, True)' aufrufen, da sie sonst nur im übergebenen Ordner arbeiten und nicht in den Unterordnern !

  • alte Version von SciTE4AutoIt gesucht

    • Micha_he
    • 25. Februar 2015 um 08:57

    Die vom 28.02.2010 ist aus der Zeit von AutoIt V3.3.6.x.
    Die hätte ich auch noch, lasse aber Oscar vorerst den Vortritt....

  • alte Version von SciTE4AutoIt gesucht

    • Micha_he
    • 25. Februar 2015 um 08:24

    Ich habe hier die V1.7.9 Lite als reinen Ordner (nur exe, properties, api).
    Wenn das reicht und die Anfrage noch aktuell ist, lade ich es hoch...

  • Zuverlässig eigene IP auslesen?

    • Micha_he
    • 19. Februar 2015 um 23:43

    Noch eine Variante von UEZ's Idee mit 'IPConnectionMetric'. Suchen wir einfach die kleinste...

    Spoiler anzeigen
    [autoit]

    MsgBox(0,"Low Metric IP", _LowMetricIP())

    [/autoit] [autoit][/autoit] [autoit]

    Func _LowMetricIP($sHost = ".")
    Local $objAdapter, $iMetric = 500, $sActualIP
    Local $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sHost & "\root\cimv2")
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    Local $colAdapter = $objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30)
    If IsObj($colAdapter) Then
    For $objAdapter In $colAdapter
    If $objAdapter.IPConnectionMetric < $iMetric And IsString($objAdapter.DefaultIPGateway(0)) Then ; ggf. kann auch die Gateway-Prüfung entfallen !
    $sActualIP = $objAdapter.IPAddress(0)
    $iMetric = $objAdapter.IPConnectionMetric
    EndIf
    Next
    If $sActualIP Then Return $sActualIP
    EndIf
    Return SetError(2, 0, 0)
    EndFunc

    [/autoit]
  • Zuverlässig eigene IP auslesen?

    • Micha_he
    • 19. Februar 2015 um 14:33

    Möglicherweise ist es brauchbar, die IP-Adresse mit dem Std-Gateway zu verwenden ?! z.B. so:

    Spoiler anzeigen
    [autoit]

    MsgBox(0,"Active IP", _ActiveIP())

    [/autoit] [autoit][/autoit] [autoit]

    Func _ActiveIP($sHost = ".")
    Local $objAdapter
    Local $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sHost & "\root\cimv2")
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    Local $colAdapter = $objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30)
    If IsObj($colAdapter) Then
    For $objAdapter In $colAdapter
    If IsString($objAdapter.IPAddress(0)) Then
    If IsString($objAdapter.DefaultIPGateway(0)) Then
    Return $objAdapter.IPAddress(0)
    Endif
    EndIf
    Next
    EndIf
    Return SetError(1, 0, 0)
    EndFunc

    [/autoit]

    Wobei: Existieren mehrere aktive Adapter mit eingetragenem (oder DHCP) Gateway, wird bei obigem Besipiel auch nur die erste zurückgegeben !

  • Zuverlässig eigene IP auslesen?

    • Micha_he
    • 19. Februar 2015 um 13:26

    Scheinbar zeigt die @IPAddress1 immer auf die IP-Adresse, des 'ersten' dem System bekannten Adapters.
    Wenn zum Beispiel das System aus einem Image installiert wurde welches bereits VMWare enthielt, sind dessen Adapter aber scheinbar in der Reihenfolge vorn. Habe ich auch bei einigen unserer Systeme bemerkt.

    Nur zur möglichen Ursache ... Eine Lösung fällt mir jetzt aber auch nicht ein.

  • Aktuelle AutoIt-Keyword-Liste

    • Micha_he
    • 12. Februar 2015 um 10:39

    Nein, das Highlighting bezog sich nur auf die Angabe wofür die zu erzeugende Datei noch Verwendung findet. Case-Insensitiv ist das Highlighting des RJ TextEd schon !
    Und für die Autovervollständigung ist eine korrekte Groß-/Kleinschreibung von Vorteil.

    Hier nun meine Variante. Falls jemand ähnliches vor hat:

    Spoiler anzeigen
    [autoit]

    Opt("MustDeclareVars", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sNew = "", $bHeader, $sSrc, $aNames, $aSubNames, $hDst
    Global $sDstName = @ScriptDir & "\AutoIt.syx", $sDstData
    Global $aSources[5][2] = [ _
    ["http://www.autoitscript.com/autoit3/files/beta/autoit/docs/keywords.htm", "Keywords"], _
    ["http://www.autoitscript.com/autoit3/files/beta/autoit/docs/macros.htm", "Macros"], _
    ["http://www.autoitscript.com/autoit3/files/beta/autoit/docs/functions.htm", "Functions"], _
    ["http://www.autoitscript.com/autoit3/files/beta/autoit/docs/libfunctions.htm", "UDFs"], _
    ["http://www.autoitscript.com/autoit3/files/beta/autoit/docs/lang_directives.htm", "Preprocessor"]]

    [/autoit] [autoit][/autoit] [autoit]

    ; Lesen der bisherigen Syntax-Datei, wenn vorhanden
    If FileExists($sDstName) Then
    $sDstData = FileRead($sDstName)
    $sDstData = StringLeft($sDstData, StringInStr($sDstData, "[Options]")) ; relevaten Teil-Vergleichsstring erzeugen (ist ggf. an ein anderes Format anzupassen)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aSources) - 1
    $bHeader = False
    SplashTextOn("Info", $aSources[$i][1] & " werden verarbeitet", 300, 50)
    InetGet($aSources[$i][0], @TempDir & "\src.htm", 1)
    $sSrc = FileRead(@TempDir & "\src.htm")
    $aNames = StringRegExp($sSrc, '(?i)(?:<td><a href=".*">)(.*?)(?:</a>)', 3)
    If IsArray($aNames) Then
    For $j = 0 To Ubound($aNames) - 1
    $aSubNames = ""
    If StringInStr($aNames[$j], " / ") Then
    $aSubNames = StringSplit($aNames[$j], " / ", 1)
    Else
    If StringInStr($aNames[$j], "...") Then
    $aSubNames = StringSplit($aNames[$j], "...", 1)
    Else
    If StringInStr($aNames[$j], ", ") Then
    $aSubNames = StringSplit($aNames[$j], ", ", 1)
    Else
    $aSubNames = StringSplit($aNames[$j], " ")
    EndIf
    EndIf
    EndIf
    For $k = 1 To $aSubNames[0]
    If Not StringInStr($sDstData & "|" & $sNew, "|" & $aSubNames[$k] & "|") And Not StringInStr($sDstData & "|" & $sNew, "=" & $aSubNames[$k] & "|") Then ; ggf. an andere Trenner (hier | & =) anpassen
    If $bHeader = False Then
    $bHeader = True
    If $sNew <> "" Then $sNew &= @CRLF & @CRLF
    $sNew &= $aSources[$i][1] & @CRLF
    EndIf
    $sNew &= $aSubNames[$k] & "|"
    EndIf
    Next
    Next
    EndIf
    If FileExists(@TempDir & "\src.htm") Then FileDelete(@TempDir & "\src.htm")
    Sleep(1000)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; neue Daten bei Bedarf in Datei speichern
    If $sNew <> "" Then
    $hDst = FileOpen($sDstName & ".new", 2)
    If $hDst = -1 Then
    SplashTextOn("Info", "Ausgabedatei " & @CRLF & @CRLF & "New_" & $sDstName & @CRLF & @CRLF & " konnte nicht geöffnet werden !", 400, 130)
    Else
    SplashTextOn("Info", "Neue Informationen werden nach " & @CRLF & @CRLF & "New_" & $sDstName & @CRLF & @CRLF & " gespeichert !", 400, 130)
    FileWrite($hDst, $sNew)
    FileClose($hDst)
    Sleep(1000)
    SplashTextOn("Info", "Verarbeitung abgeschlossen", 300, 50)
    EndIf
    EndIf
    Sleep(2000)
    SplashOff()

    [/autoit]
  • Aktuelle AutoIt-Keyword-Liste

    • Micha_he
    • 11. Februar 2015 um 23:51

    genau... und Syntax-Highlighting !

    Das mit dem Auslesen der Dateien wie CentuCore beschrieb und anschließendem Auslesen aus dem Sourcecode wäre natürlich eine Lösung. Zwar mit etwas Arbeit, aber eine Lösung ! (und das mit dem letzten Stand der Beta-Version)

  • Aktuelle AutoIt-Keyword-Liste

    • Micha_he
    • 11. Februar 2015 um 17:30
    Zitat von alpines

    Könntest den neuesten Installer einfach entpacken und von dort die Keywords nehmen.


    Wenn das die aktuellsten (letzte Beta) sein sollten ist die 'au3.keyword.properties' ja ebensfalls ohne ordentliche Groß-/Kleinschreibung.

    Zitat von CentuCore

    Du könntest von https://www.autoitscript.com/autoit3/docs/keywords.htm das Keyword-Dokument runterladen und per StringRegexp() die Einzelnen auslesen.
    Alternativ die Beta-Keywords: https://www.autoitscript.com/autoit3/files/…cs/keywords.htm für


    Enthält aber nun wirklich nur die paar 'Keywords' keine Funktionen, UDF-Funktionen u.a..

  • Aktuelle AutoIt-Keyword-Liste

    • Micha_he
    • 11. Februar 2015 um 16:52

    Kann mir jemand sagen, wo man eine möglichst immer wieder aktuelle Liste der AutoIt-Keywords, Makros, int. und Std. UDF-Funktionen herunterladen kann ?

    Benötige die für die Aktualisierung der Syntaxdateien eines anderen Editors (RJ TextEd). Die Version vom SciTE ist ja auch schon etwas älter (1.6.2014) und die 'au3.keyword.properties' ist auch komplett kleingeschrieben...

  • Problem 2 Guis

    • Micha_he
    • 10. Februar 2015 um 16:09

    Hast Du denn Dein Script nach den (meinen) oben genannten Tips (die obeigen Beiträge solltest Du schon durcharbeiten und versuchen zu verstehen) einmal geändert und getestet ?

    Falls das dann nicht geht: Script in Neues kopieren, alle speziellen Funktionen (ggf. eine MsgBox einbauen), Pfade und Includes so anpassen, das es bei uns auch laufen sollte (DirCopy, DirCopy wird kaum jemand haben wollen, ggf. sind Laufwerke nicht verfügbar und deine JPG's für GUICtrlCreatePic haben wir nicht) . Nochmal testen, das es dann immer noch nicht klappt und nun hier Deine neue Variante einstellen.
    Dann können wir es testen... und sehen was Du umgesetzt/verbessert hast...

  • S7 300 / Logo über AutoIt :-(

    • Micha_he
    • 7. Februar 2015 um 12:02

    Im Prinzip (ungetestet) so...

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include "LibNoDave.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $IP_SPS1 = "192.168.3.180", $Socket_SPS1, $di_SPS1, $dc_SPS1, $Name_SPS1 = "SPS1"

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=C:\Users\M3tzl3r\Documents\Form2.kxf
    $Form1 = GUICreate("S7 300", 177, 213, 209, 139)
    $WHZWAND = GUICtrlCreateButton("WHZ Wand", 16, 40, 139, 49)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $WHZWAND
    _Setze_Was()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Setze_Was()
    Local $Anzahl_Bytes = 1
    Local $StartByte = 221
    _DaveInit()
    _daveTCPConnect($IP_SPS1, $Socket_SPS1, $di_SPS1, $dc_SPS1, 0, 2, $Name_SPS1)
    If @error Then
    MsgBox(16, "Error " & @error, "TCP connection parameter incorrect for SPS1!")
    DllClose($DLL)
    Return
    EndIf
    ; Schreibe 7 Bytes ausgehend vom MB 230
    $Buffer = DllStructCreate("CHAR buf[" & $Anzahl_Bytes & "]")
    $pBuffer = DllStructGetPtr($Buffer)
    _davePut8($pBuffer, 1)
    _davePut16($pBuffer, 3)
    _davePutFloat($pBuffer, 644321.55)
    _daveWriteBytes($dc_SPS1, $daveFlags, 0, $StartByte, $Anzahl_Bytes, $Buffer)
    _daveTCPDisconnect($Socket_SPS1, $di_SPS1, $dc_SPS1)
    _DaveDeInit()
    EndFunc

    [/autoit]
  • Browser als eingebettetes Object möglich

    • Micha_he
    • 7. Februar 2015 um 11:53

    Nein, eingebettet ging in meinen Test's (mit dem FF) gar nicht. Gleich, mit welchen Parametern gestartet.

    Außerdem hat die Nutzung eines (installierten) FF mit dem gleichen Profil das Problem, das u.U. die neue Position/Größe beim Schließen in die Konfig übernommen wird.

    Ich glaube das wird alles nichts praktikables/einfaches mit dem FF. Versuche es nun einfach ohne die Einbettung in eine AutoIt-Oberfläche...

  • Problem 2 Guis

    • Micha_he
    • 6. Februar 2015 um 12:24

    Ich kann es im Moment nicht testen aber muss Du in deiner Funktion 'Func gui2()'
    mit 'GUISetOnEvent($GUI_EVENT_CLOSE, "On_Close", $hGUI2)' nicht angeben das es sich um die '$hGUI2' handelt ?

    Außerdem mischt Du 'GUIOnEventMode' mit 'GUIGetMsg' was man grundsätzlich vermeiden sollte... wenn ich mich nicht täusche !? Schau Dir mal das Beispiel der Hilfe zum 'OnEvent Mode' an. Dort findest Du kein GUIGetMsg() ! Wird alles über GUISetOnEvent() und GUICtrlSetOnEvent() gelöst.

  • Browser als eingebettetes Object möglich

    • Micha_he
    • 6. Februar 2015 um 09:11

    Nein, ist nur privat/nicht kommerziell. Ich schau mir Dein Beispiel nachher mal an...

    Teste gerade noch mit dem FF-Parameter '-chrome' der mir ein Fenster ohne Menue u.ä. erzeugt. Nur mit der Größe haut das noch nicht hin.

  • Browser als eingebettetes Object möglich

    • Micha_he
    • 5. Februar 2015 um 22:27

    Das mit dem _WinAPI_SetParent funktioniert zwar mit dem Notepad im Beispiel, aber FireFox stürz dabei ab.
    Darauf basiert aber leider der Hinweis von Chip auch...

  • Browser als eingebettetes Object möglich

    • Micha_he
    • 5. Februar 2015 um 20:40

    Aber natürlich habe ich mir die Funktionen der 'FF.au3' angesehen. Nur hilft mir keine beim eigentlichen Problem, das Fenster in die GUI zu bekommen oder gleich darin zu öffnen.

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™