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

Beiträge von bernd670

  • Anfängerproblem mit einem Script

    • bernd670
    • 18. Mai 2006 um 12:14

    Hallo,

    was soll beim betätigen von ENTER genau geschehen, wenn zum beispiel ein bestimmter Button gedrückt werden soll muss nur der style-Wert vom Button entsprechen angepasst werden z.B.:

    Spoiler anzeigen
    Code
    #include <GUIConstants.au3>
    
    
    GUICreate("Button test", 250, 80)
    $Btn_OK = GUICtrlCreateButton("&OK", 25, 40, 85, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetFont(-1, 10, 800, 0)
    $Btn_Cancel = GUICtrlCreateButton("&Beenden", 135, 40, 85, 25)
    GUICtrlSetFont(-1, 10, 800, 0)
    
    
    GUISetState(@SW_SHOW)
    
    
    While 1
    	$msg = GuiGetMsg()
    	Select
            Case $msg = $GUI_EVENT_CLOSE 
                ExitLoop
    
             Case $msg = $Btn_Cancel
                MsgBox (64,"status","Beenden wurde gedrückt")
                ExitLoop
    
            Case $msg = $Btn_OK
                MsgBox (64,"Status", "OK wurde gedrückt")
    
    
            Case Else
                ;;;;
    
        EndSelect
    
    
    WEnd
    Alles anzeigen

    ENTER und Alt-O betätigen den OK-Button, mit Alt-B kann man beenden.

    Auf die 2. Frage gibt es mehrere Antworten:

    1. Funktioniert immer
    Die Datei Zeile für Zeile einlesen (FileReadLine) -> gelesene Zeile überprüfen und ändern -> die Zeilen in eine neue Datei zurückschreiben -> wenn allle Zeilen bearbeiet sind die alte Datei löschen und der neuen Datei den alten Namen geben

    2. Für kleine Dateien
    Die komplette Datei in ein Array einlesen -> Änderungen im Array durchführen -> Array wieder in die Datei schreiben

  • script geht nicht richtig (Farbe suchen und Maus positionieren)

    • bernd670
    • 17. Mai 2006 um 23:31

    Hallo,

    füge am Anfang mal folgende Zeile ein:

    Code
    opt("PixelCoordMode", 0)
  • script geht nicht richtig (Farbe suchen und Maus positionieren)

    • bernd670
    • 17. Mai 2006 um 22:28

    Hallo,

    ich kann keinen Fehler erkennen, eine kleine Fehlerbeschreibung wäre evtl. hilfreich!

  • Commander

    • bernd670
    • 17. Mai 2006 um 22:23

    Hallo,

    schau mal ob du damit was anfangen kannst :D

    Spoiler anzeigen
    C
    ;~ ###################################################
    ;~ # Funktion: Stellt Dateiinhalt als TreeView dar
    ;~ #
    ;~ # Autor: bernd670
    ;~ ##################################################
    #include <File.au3>
    #include <Array.au3>
    #include <GUIConstants.au3>
    
    
    Global $Tree[1], $FileTable[1][2]
    
    
    Opt("GUIOnEventMode", 1)  ; Wechsle in den OnEvent Modus
    
    
    $mainwindow = GUICreate("Browser",600, 400)
    $TreeView = GUICtrlCreateTreeView(30, 40, 300, 350, BitOR($WS_BORDER,$TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS))
    MakeFileTree(".\_DateiListe.txt")
    
    
    
    
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    
    
    GUISetState()
    
    
    While 1
        Sleep(1000)
    WEnd
    
    
    Func CLOSEClicked()
        If @GUI_WINHANDLE = $mainwindow Then 
            Exit
        EndIf 
    EndFunc
    
    
    Func SelectFile()
        ;Beachte: an diesem Punkt wäre @GUI_CTRLID gleich $Tree[$Ebene]
        For $index = 0 To UBound($FileTable,1) - 1
            If $FileTable[$index][0] = @GUI_CtrlId Then
                MsgBox(0, "GUI Event", "Du hast die Datei " & Chr(34) & $FileTable[$index][1] & Chr(34) & " gewählt!")
            EndIf
        Next
    EndFunc
    
    
    
    
    Func MakeFileTree ($strFileName)
    
    
        Local $arFile, $arTemp, $iFile, $iInsert, $iPos, $iPos2
    
        If Not FileExists($strFileName) Then
            MsgBox(16, "Fehler", "Datei " & $strFileName & " wurde nicht gefunden!")
            Exit 
        EndIf
    
        _FileReadToArray($strFileName,$arFile)
        _ArraySort($arFile,0,1)
    
    
        $Ebene = 0
        $arTemp = StringSplit(StringStripCR($arFile[1]), "\")
        For $iInsert = 1 To $arTemp[0]
    
    
            If UBound($Tree,1) <= $Ebene Then ReDim $Tree[$Ebene + 1]
    
    
            Select
                Case $iInsert = 1
                     ; Laufwerksbezeichnung
                    $Tree[$Ebene] = GUICtrlCreateTreeViewitem ($arTemp[$iInsert], $TreeView)
                    $Ebene = $Ebene + 1
    
                Case $iInsert = $arTemp[0]
                    ; Dateiname
                    $Tree[$Ebene] = GUICtrlCreateTreeViewitem ($arTemp[$iInsert], $Tree[$Ebene-1])
                    $FileTable[UBound($FileTable,1)-1][0] = $Tree[$Ebene]
                    $FileTable[UBound($FileTable,1)-1][1] = $arFile[1]
                    GUICtrlSetOnEvent($Tree[$Ebene],"SelectFile")
                    ReDim $FileTable[UBound($FileTable,1)+1][2]
    
                Case Else
                    ; Verzeichnisname
                    $Tree[$Ebene] = GUICtrlCreateTreeViewitem ($arTemp[$iInsert], $Tree[$Ebene-1])
                    $Ebene = $Ebene + 1
    
    
            EndSelect
        Next
    
    
        For $iFile = 2 To $arFile[0]
            $arTemp = StringSplit(StringStripCR($arFile[$iFile]),"\")
            $iPos = StringInStr($arFile[$iFile], "\", 0, -1)
            $strLeft = StringLeft($arFile[$iFile], $iPos)
    
    
            ; Ebenenkorrektur
            $iPos2 = StringInStr($arFile[$iFile - 1], "\", 0, -1)
            $Ebene = $Ebene + (UBound(StringSplit($strLeft,"\"),1) - UBound(StringSplit(StringLeft($arFile[$iFile - 1],$iPos2),"\"),1)) 
    
            For $iSearch = 0 To $arTemp[0] - 1
                If StringLeft($arFile[$iFile - 1],StringLen($strLeft)) =  $strLeft Then
                    For $iInsert = $iSearch To 0 Step - 1
    
    
                        If UBound($Tree,1) <= $Ebene Then ReDim $Tree[$Ebene + 1]
    
    
                        Select
                            Case $iInsert = 0
                                ; Dateiname
                                $Tree[$Ebene] = GUICtrlCreateTreeViewitem ($arTemp[$arTemp[0]-$iInsert], $Tree[$Ebene-1])
                                $FileTable[UBound($FileTable,1)-1][0] = $Tree[$Ebene]
                                $FileTable[UBound($FileTable,1)-1][1] = $arFile[$iFile]
                                GUICtrlSetOnEvent($Tree[$Ebene],"SelectFile")
                                ReDim $FileTable[UBound($FileTable,1)+1][2]
    
                            Case $iInsert = $arTemp[0] - 1
                                ; Laufwerksbezeichnung
                                $Tree[$Ebene] = GUICtrlCreateTreeViewitem ($arTemp[$arTemp[0]-$iInsert], $TreeView)
                                $Ebene = $Ebene + 1
    
                            Case Else
                                ; Verzeichnisname
                                $Tree[$Ebene] = GUICtrlCreateTreeViewitem ($arTemp[$arTemp[0]-$iInsert], $Tree[$Ebene-1])
                                $Ebene = $Ebene + 1
    
    
                        EndSelect
                    Next
                    ExitLoop
                Else
                    $Ebene = $Ebene - 1
                EndIf
                $iPos = StringInStr($strLeft, "\", 0, -2)
                $strLeft = StringLeft($strLeft, $iPos)
            Next
        Next
    EndFunc
    Alles anzeigen
  • Arry Frage

    • bernd670
    • 17. Mai 2006 um 10:55

    Das problem ist folgendes, Sleep hat zwar keinen Rückgabewert beeinflusst aber denoch den Wert von @error, d.h. @error hat nach dem Aufruf von Sleep immer den Wert 0. Der @error-Wert von PixelSearch wird also immer mit 0 überschrieben und somit kommt es immer zu dem Fehler wenn die Farbe in dem Bereich nicht zu finden ist.

  • Arry Frage

    • bernd670
    • 17. Mai 2006 um 10:35

    Hallo,

    So kann es nicht funktionieren weil sich @error immer auf den Befehl bezieht der als letztes (in diesem Fall der Sleep-Befehl) ausgeführt wurde.

  • Arry Frage

    • bernd670
    • 17. Mai 2006 um 08:12

    Hallo,

    eine andere Möglichkeit besteht darin die Dimension von $coord abzufragen:

    Code
    While 1
    	Sleep(500)
    	$coord = PixelSearch(0, 0, 25, 200, 0xF6CCCC)
    	If UBound($coord,0) Then
    		MsgBox(0,"Adresse","X = " & $coord[0] & @LF & "Y = " & $coord[1])
    	Else
    		MsgBox(0,"Nichts!","Farbe nicht gefunden")
    		ExitLoop
    	EndIf
    WEnd
    Zitat

    Zitat von Dr.Galvany
    so wie es aussieht, kann ich "$coord[0]" nicht abfragen.
    so lange die farbe da ist, geht es alles.
    wenn die farbe nimmer da ist schliest sich das script einfach mit fehler (Subscript used with non-Array variable.)
    warum ist das so?


    PixelSearch gibt bei Erfolg ein eindimensionales Array zurück. Im Fehlerfall, wenn die Farbe nicht existiert, bleibt $coord undimensioniert und ein Zugriff auf ein $coord[0] erzeugt dann den von dir beschrieben Fehler.

  • Files lokalisieren und in Log schreiben

    • bernd670
    • 15. Mai 2006 um 13:30

    Hallo Christian,

    hast du auch die richtige Autoit3.exe benutzt? Die befindet sich im Verzeichnis AutoI3\beta\ oder bei SciTE mit Alt+F5 ausführen bzw. mit Alt+F7 kompilieren!

  • Files lokalisieren und in Log schreiben

    • bernd670
    • 14. Mai 2006 um 13:29

    Hallo,

    die Lösung die du gewählt hast ist natürlich die eleganteste und einfachste ;)! ich würde es im normalfall genauso lösen (evtl. mit Fehlermeldung), das ganze mit der aktuellen Beta-Version kompilieren und gut ist. Es würde zwar auch ohne Rekursion gehen aber der Aufwand lohnt sich wahrscheinlich nicht.

    Man könnte es natürlich auch ganz einfach mit dem DIR-Befehl lösen:

    Code
    RunWait(@ComSpec & " /c DIR /S /B C:\*.id > idfiles_c.log", "", @SW_HIDE)


    und danach mit dem Ergebins in "idfiles_c.log" weiterarbeiten. :evil:

  • Files lokalisieren und in Log schreiben

    • bernd670
    • 14. Mai 2006 um 12:54

    Hallo,

    schon mal was von Rekursion gehört? In Zeile 23 wird die Funktion FileSearch rekursiv aufgerufen, d.h. FileClose wird erst aufgerufen, wenn alle Unterverzeichnisse durchlaufen sind.
    Natürlich darf man nach der Funktion FileFindNextFile kein FileClose aufrufen, diese Funktion arbeitet ja mit dem Filehandle den die Funktion FileFindFirstFile geöffnet hat und würde eine Fehler verursachen, wenn man ein FileClose aufrufen würde.

  • Files lokalisieren und in Log schreiben

    • bernd670
    • 13. Mai 2006 um 10:45

    Hallo,

    da es die Operatoren "+=" und "&=" in v.3.1.0 noch nicht gibt müssen die Zeilen 18, 23, 25 und 26 auch noch angepasst werden:

    Code
    18:     $z = $z + 1
    23:     If $check_file <> 0 Then $allfiles = $allfiles & FileSearch($full_file, $s_ext, $sep_char, 1)
    25: 	If $s_ext = '*.*' Then $allfiles = $allfiles & $full_file & $sep_char
    26:	If $s_ext <> '*.*' And StringTrimLeft($s_ext, 1) = StringRight($full_file, StringLen(StringTrimLeft($s_ext, 1))) Then $allfiles = $allfiles & $full_file & $sep_char

    Nachtrag

    Aufgrund eines Fehlers, in der Funktion FileFindFirstFile, kann es zu folgendem Fehler kommen:

    --> Unable to open file, the maximum number of open files has been exceeded.

    Dieser Fehler wurder erst in der Version v.3.1.1.81 (beta) behoben.

  • starten im netzwerk

    • bernd670
    • 13. Mai 2006 um 10:31

    Um den AT-Befehl nutzen zu können muss der Taskplaner-Dienst laufen!

    Zusätzlich sollte man mit der Umgebungsvariablen %COMSPEC% arbeiten, ansonsten kann es sein das das Programm nicht ausgeführt wird.

    z.B. 'at \\markus 09:50 %COMSPEC% /C "c:\hallo.exe" '


    mfg Bernd

  • starten im netzwerk

    • bernd670
    • 13. Mai 2006 um 01:07

    Hallo,

    ich mache sowas immer mit dem Befehl AT. Damit ist es möglich Zeitgesteuert, auch auf entfernten Rechnern, Befehle auszuführen!

    Ich weiß jetzt nur nicht ob es den Befehl auch auf Win98 Systemen gibt. Auf NT, 2000, XP und 2003 läuft er ohne Probleme!

    Mfg Bernd

  • Files lokalisieren und in Log schreiben

    • bernd670
    • 13. Mai 2006 um 00:31

    Hallo,

    in dem Script werden Schlüsselworter und Operatoren benutzt die erst ab AutoIt v3.1.1.16 (beta) zur Verfügung stehen. Einfach hier die aktuelle Beta-Version herunterladen und schon geht's!

    Mfg Bernd

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™