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

  • Kleine Anfangshilfen bitte

    • BugFix
    • 20. November 2008 um 20:51

    Schau dir mal diese Funktionen an:

    [autoit]

    PixelGetColor()
    PixelSearch()
    MouseMove()
    MouseClick()

    [/autoit]
  • Die Checkbox Teil II

    • BugFix
    • 20. November 2008 um 17:30
    Zitat von anno2008

    Ich hab an eine Checksum gedacht, basierend auf 2er Potenzen, aber die kommen auch öfter vor.


    Das geht recht gut - wenn auch nicht unbegrenzt ;)

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    _ReadCB()
    ExitLoop
    EndIf
    Next
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]
  • GUI anpassen an Label-Einträge

    • BugFix
    • 20. November 2008 um 15:05
    Zitat von Doddl

    die Einträge wie in einer Tabelle darstellen kann.


    Na dann verwende doch die Tabellendarstellung ==> ListView ist dafür ideal.

  • GUI anpassen an Label-Einträge

    • BugFix
    • 20. November 2008 um 14:52

    So wie ich das sehe, willst du irgendwo Daten auslesen und diese auf der GUI darstellen. Warum verwendest du keine Liste oder ListView?

  • 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:

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™