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

Beiträge von BugFix

  • Wie arbeitet man richtig mit functionen (func)?

    • BugFix
    • 20. November 2008 um 13:05
    Zitat von alfred

    Aber was ist, wenn ich jetzt eine Funktion hat, die Parameter braucht? Geht das auch über SetOnEvent?
    So meinte ich das :)


    Geht auch. Du weist z.B. mehreren Button dieselbe Funktion zu. In Abhängigkeit des gedrückten Buttons rufst du von dort eine Funktion mit Parameter auf:

    [autoit]

    ; Button-Funktion
    Func _ButtonClicked()
    Switch @GUI_CtrlHandle
    Case $Button1
    _Button('Bla')
    Case $Button2
    _Button('Blabla')
    Case $Button3
    _Button('Blub')
    EndSwitch
    EndFunc

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

    Func _Button($Parameter)
    ; der Code, zb.:
    GUICtrlSetData($ctrl, $Parameter)
    EndFunc

    [/autoit]
  • Wie arbeitet man richtig mit functionen (func)?

    • BugFix
    • 20. November 2008 um 12:55
    Zitat von alfred

    Wenn das ganze jetzt über einen Button ausgelöst werden soll, geht das glaube ich (Achtung: Halbwissen :)) nicht über die Event-Mode, sondern nur über den Messageloop-Modus (wenn falsch: Bitte klärt mich auf :))


    Achtung: Aufklärung! :rofl:
    Das geht selbstredend sowohl im GUIGetMsg- als auch im OnEventMode ;) .
    Unterschied: Im Event-Mode wird bei Erstellung des Ctrl ein Funktion zugeordnet (GUICtrlSetOnEvent), die durch ein Event dieses Ctrl aktiviert wird. Im GUIGetMsg-Mode wird ständig die GUI abgefragt, ob und welches Ctrl denn gerade ein Event ausgelöst hat. Die entsprechende ID wird dann weiterverarbeitet.

    Zitat von Luxenburg

    Es geht darum ein Script zu schrieben womit ich eine Installationsprotokoll erstellen kann.


    Füge doch hinter jede Codezeile, die du loggen willst einfach ein: _FileWriteLog("Datei", Text)

  • Wie arbeitet man richtig mit functionen (func)?

    • BugFix
    • 20. November 2008 um 12:48

    Die Angaben, die von der Funktion verarbeitet werden sollen, werden im Funktionsaufruf als Parameter übergeben. Dazu werden in der Funktion entsprechende Platzhalter deklariert. Eine Funktion sollte entweder einen Ergebniswert zurückgeben oder einen Wert für Erfolg(1 bzw. >0)/Mißerfolg(0)

    [autoit]

    ; Bsp. 1
    Func _Addieren($Param_1, $Param_2)
    Return $Param_1 + $Param_2
    EndFunc

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

    ; Anwendung:
    $Summe = _Addieren(120, 70)
    $Summe = _Addieren(10, 200)

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

    ; Bsp. 2
    #include <File.au3>
    Func _Log($LOGFILE, $TEXT)
    Return _FileWriteLog($LOGFILE, $TEXT)
    EndFunc

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

    ; Anwendung:
    _Log(@ScriptDir & '\Event.log', 'Programm Start')
    _Log(@ScriptDir & '\Event.log', 'Error blabla')

    [/autoit]
  • Live Eingabe überprüfen einer ComboBox

    • BugFix
    • 20. November 2008 um 11:53

    Du kannst dazu $WM_COMMAND nutzen.
    Wie du es verwendest, findest du in der Hilfe zu GUIRegisterMsg().

  • Unicode - Taste halten, Taste entlasten

    • BugFix
    • 20. November 2008 um 11:38
    Zitat von AutoItHilfe

    There are a few parts of AutoIt that don't yet have full Unicode support. These are:

    Send and ControlSend - Instead, Use ControlSetText or the Clipboard functions.
    Regular expressions - To reduce the size of AutoIt, the regular expression engine is currently compiled in ANSI mode.
    Console operations are converted to ANSI.
    These limits will be addressed in future versions if possible.

  • Filereadline mit komma getrennt

    • BugFix
    • 20. November 2008 um 08:59

    Du brauchst keine einzelnen Variablen um die ausgelesenen Werte zuzuordnen, verwende ein Array:

    [autoit]

    ; ganze Datei in Array einlesen
    Dim $arDatei
    _FileReadToArray("Dateipfad", $arDatei)
    ; entweder trennst du die noch zusammenhängenden Werte vorab auf, oder direkt beim Zugriff
    ; vorab:
    ReDim $arDatei[UBound($arDatei)][2]
    Local $var
    For $i = 1 To UBound($arDatei) -1
    $var = StringSplit($arDatei[$i][0], ',')
    $arDatei[$i][0] = $var[1]
    $arDatei[$i][1] = $var[2]
    Next

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

    ; direkt beim Zugriff wäre analog, nur ohne Schleife und statt $i der entsprechende Zeilenindex

    [/autoit]
  • Tastenkombination aufzeichnen

    • BugFix
    • 19. November 2008 um 09:15

    Dazu 2 Antworten ;)
    1. Ja, es ist möglich. Aber da diese Anwendung dann problemlos als Keylogger mißbraucht werden könnte, werden wir hier im Forum den Code nicht posten. Ich hoffe, dafür hast du Verständnis.
    2. Lass doch den User mittels einer kleinen GUI den Hotkey festlegen:
    - Listbox mit allen Tasten
    - User wählt Taste, per Button wird diese zum HotKeystring zugefügt (Anzeige in einem Label)
    - User wählt nächste Taste... usw.
    - zum Schluß Übernahme Hotkey und Funktionszuweisung

  • Run (Funktion) oder wie kann man eine Funktion paralell zum Script im Script aufrufen

    • BugFix
    • 18. November 2008 um 18:48

    Den Tipp hatte ich doch schon gegeben ;) AdlibEnable(). Schau dir das mal an. Da kannst du intervallmäßig eine Funktion ausführen lassen - auch wenn das Skript läuft.

  • Run (Funktion) oder wie kann man eine Funktion paralell zum Script im Script aufrufen

    • BugFix
    • 18. November 2008 um 18:16
    Zitat von MatthiasG.

    BugFix : Wieso ist das nicht so einfach?? Über den OnEventMode geht das doch, oder


    Wenn du z.B. gerade in einer Schleife etwas abarbeitest, kann kein Ereignis des Buttons wirksam werden. Der Klick auf den Button wird dann im Tastaturpuffer aufgefangen und erst, wenn die Schleife beendet ist, kann das Ereignis verarbeitet werden. Da ist es völlig egal, ob OnEventMode oder GUIGetMsg.

  • Run (Funktion) oder wie kann man eine Funktion paralell zum Script im Script aufrufen

    • BugFix
    • 18. November 2008 um 17:15
    Zitat von MatthiasG.

    Ich hab das noch nie versucht, aber es dürfte eigentlich am leichtesten über eine GUI gehen. Eine MessageBox ist ja nur für eine Nachricht da. Dort muss man ja bestätigen...

    Benutzt Koda, dann geht das sehr schnell :D


    Ganz so einfach geht das nicht ;)
    Echtes Multitasking ist nicht möglich. Du kannst was mit AdlibEnable basteln um kontinuierlich zu ermitteln, ob abgebrochen werden soll. Die Standard-MessageBox kannst du da aber nicht verwenden.

  • Hörbuchplayerproblem

    • BugFix
    • 18. November 2008 um 16:15

    Deine Funktion Titeltestzeit($Name) ruft NaechsterTitel($Name) auf. So wie ich das sehe, wird aber kein neuer Wert an $Name übergeben - also wird die Funktion mit dem letzten Wert aufgerufen ==> dein Titel beginnt von vorn.

  • Schon wieder ich... :D Problem mit einer Schleife

    • BugFix
    • 18. November 2008 um 16:05

    Du deklarierst hier:

    [autoit]

    $Anzahl = $Anzahl - 1

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

    Global $Stein[$Anzahl], $Formel[$Anzahl], ;...usw.

    [/autoit]

    Somit haben die Array $Anzahl Elemente. Nimm als Bsp. 5: Bei der Adressierung startest du mit [0], das letzte Element ist also [4] ($Anzahl -1).

  • Die Radio Box

    • BugFix
    • 18. November 2008 um 15:26
    Zitat von RR04

    Aber, wenn dass schon am Anfang des Scriptes fest steht (3xRadios) ?
    Am Ergebnis ändert sich nichts, dauert nur ! ;)


    Ist eine Sache der Gewöhnung. Es empfiehlt sich immer UBound($array)-1 zu verwenden, da dann garantiert alle Elemente erfaßt werden. Es kann ja durchaus passieren, dass man eine 'Eingebung' hat und noch ein Radio mehr verwendet, wird jetzt vergessen den Zähler hochzusetzen gibt es einen Fehler. Mit UBound ist halt jede mögliche Veränderung abgesichert. ;)

  • Unbestimmte Anzahl Reg. - Tweaks nacheinander abarbeiten

    • BugFix
    • 17. November 2008 um 18:10
    Zitat von nuts

    d.h. ich kann dem Setup-Programm nachträgliche Einträge in der .ini nichtmehr mitteilen.


    Du brauchst dem Programm nur mitteilen, dass eine INI vorhanden ist (bzw., dass wenn eine da ist - If FileExists($INI) - diese eingelesen und verarbeitet wird.
    IniReadSection() liest dir alle Schlüssel-Wert-Paare einer Sektion in ein Array ein - und dieses arbeitest du einfach ab.
    Kannst du jederzeit beliebig erweitern.

    [autoit]

    $var = IniReadSection($INI, 'section')
    For $i = 1 To $var[0][0]
    $var[$i][0] ; Key
    $var[$i][1] ; Value
    ; dein Code zum abarbeiten
    Next

    [/autoit]
  • bestimmte Dateiinhalte löschen ?

    • BugFix
    • 17. November 2008 um 17:35

    So,
    hab dir mal die Rekursion reingebaut:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include "_Array2DEmptyDel.au3"

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

    Local $folder, $filesinpath, $aFile
    $folder = "c:\admin_V8\config\project_config\users\"
    $filesinpath = _GetFilesFolder_Rekursiv($folder, 'ucf', 0)
    If $filesinpath[0] = 0 Then Exit MsgBox(262192,"Achtung!","Der gewählte Ordner enthält keine Dateien!")

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

    For $i = 1 To UBound($filesinpath) -1
    If Not _FileReadToArray($filesinpath[$i], $aFile) Then ContinueLoop
    For $k = 1 To UBound($aFile) -1
    If StringRegExp($aFile[$k], '(MS_)(MDL(APPS)?|DGNAPPS)') Then $aFile[$k] = ''
    Next
    _Array2DEmptyDel($aFile)
    _FileWriteFromArray($filesinpath[$i], $aFile, 1)
    Next

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]
  • _MultiFileCopy

    • BugFix
    • 17. November 2008 um 16:53
    Zitat von Oscar

    Kann ich nicht nachvollziehen.


    Man was ist das Windows doch für 'ne tolle Sache: Du hast eines, ich hab eines - aber trotzdem macht jedes was es will. :rofl:

  • _MultiFileCopy

    • BugFix
    • 17. November 2008 um 09:05
    Zitat von Oscar

    Wobei das nur beim kopieren über's Netz passiert (egal ob Laufwerksbuchstabe oder Pfad und egal ob Quelle oder Ziel).


    Ich denke, das ist ein reines Windows-Problem. Wenn ich per Explorer ins Netz kopiere, funktioniert die Fortschrittsanzeige auch nur bedingt, d.h. die Statusbar arbeitet rein nach Anzahl der Dateien (z.B. 2 Dateien - je 50% Statusbar) und zeigt diesen 'Fortschritt' bei Beginn des Kopiervorgangs für diese Datei an. Ist die letzte Datei eine größere, hast du ewig eine 100% - Anzeige.

  • Bilder in GUI beweglich machen

    • BugFix
    • 16. November 2008 um 18:38

    - Mauszeigerposition auswerten
    - wenn Mauspos = Controlpos UND MouseDown ==> ControlMove(Koordinaten Mouse)

  • UDF Wetter lokal

    • BugFix
    • 16. November 2008 um 16:20
    Zitat von progandy

    Einfach ein Ubound-Test davor :D


    :P
    Ja, damit kann ich den Fehler abfangen, aber ich weiß leider nicht welcher Wert tatsächlich fehlt. :huh:

  • UDF Wetter lokal

    • BugFix
    • 16. November 2008 um 16:11

    Hi,
    das kann passieren, wenn evtl. eine Temperatur nicht angegeben ist. Da Max- und Mintemperatur durch Regexabfrage nicht zu trennen sind (absolut identisch im Sourcecode), "hoffe" ich darauf dass diese da sind. Ich nehme halt 5 für min und 5 für max. Falls RegEx nur 9 gefunden hat, ist natürlich die Arrayadressierung falsch und der Fehler kommt.
    Mal sehen, wie ich das beheben kann.

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™