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

  • return - frage

    • BugFix
    • 27. Oktober 2010 um 11:50
    Zitat von WhiteLion

    das du lieber BugFix um verschachtelte funktionsaufrufe herumkommst, ist für mich schwer vorstellbar.


    :D Es ist schon klar, dass verschachtelte Aufrufe ihre Notwendigkeit haben. Und natürlich lagere ich auch viel Code in Sub-Routinen aus. Mir ging es bei meiner Bemerkung eher um die Verschachtelungstiefe - also nicht ein Aufruf, der dann das ganze Programm in 30 hintereinandergelagerten Subs abarbeitet. Ich gruppiere da i.A. thematisch.

    Übrigens, um auf die Startfrage zurückzukommen, kannst du ja über den Returnwert einen Rücksprung in die Main veranlassen, bzw. die weitere Abarbeitung verhindern:

    Spoiler anzeigen
    [autoit]

    _1()

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

    Func _1()
    _1_1()
    MsgBox(0, '', "wieder in _1()")
    EndFunc

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

    Func _1_1()
    Switch _1_2()
    Case 1
    Return
    Case 2
    _1_3()
    EndSwitch
    EndFunc

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

    Func _1_2()
    If MsgBox(36, '', 'zurück zur Main') = 6 Then Return 1
    Return 2
    EndFunc

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

    Func _1_3()
    MsgBox(0, '', 'Func _1_3')
    EndFunc

    [/autoit]
  • Kann Autoit warten, bis USB-Stick eingesteckt ist?

    • BugFix
    • 27. Oktober 2010 um 11:16
    Zitat von kallimero

    Nun möchte ich w, h, x pos usw. auf Default lassen und nur den Paramter "opt" ändern. Das funktioniert bisher leider nicht.


    Die Parameter sind von der Reihenfolge abhängig. Du mußt also NICHT NUR den gewünschten Parameter übergeben, sondern alle, die davor sind mit dem Standardwert "Default" (meist geht es auch mit "-1" statt "Default").
    Für dein Bsp.:

    [autoit]

    SplashTextOn ( "Virenscanner", "Bitte einen USB Stick einstecken." , -1, -1, -1, -1, 2)

    [/autoit]
  • String rückwärts wiedergeben

    • BugFix
    • 27. Oktober 2010 um 11:10
    [autoit]

    _StringReverse()

    [/autoit]

    :whistling:

  • return - frage

    • BugFix
    • 27. Oktober 2010 um 11:07

    Mit Return kehrst du immer direkt in die aufrufende Funktion zurück (oder rufst mit Return _Irgendwas() eine weitere Funktion auf, die nach Beendigung aber ebenfalls an die ursprünglich aufrufende Funktion zurückgibt) . Eine Ebenenstaffelung (wie bei ExitLoop) gibt es hier nicht.
    Verschachtelte Funktionsaufrufe sind auch nicht sehr sinnvoll. Gib lieber immer an die "Zentrale" zurück und starte von dort den nächsten Aufruf. Verlierst du auch nicht so schnell den Überblick. ;)

    @Milla: Mit deinem Bsp. landet er in einer Endlosschleife.

  • Wie erstellt man einen einfach Debug Output in ein Textfile

    • BugFix
    • 27. Oktober 2010 um 09:45
    Zitat von HassanMullah

    Ich sehe zwar den Namen der Variablen, aber nicht den Wert.

    Ich möchte jedoch gerne auf einfache Art und Weise die Veränderung der Werte protokollieren.


    Ich weiß, was du willst:
    Ein Fenster, in das du die zu überprüfenden Variablen einträgst und dann eine ständige Ausgabe der (sich ändernden) Werte für diese Variablen.
    Im EN-Forum hat sich mal jemand an 'nem Debugger versucht. Habe das Tool getestet aber wieder verworfen. Arbeitet nicht zuverlässig.
    Mir persönlich reicht "ConsoleWrite($variable)" völlig. Sehe keine Notwendigkeit für ein extra Tool. Und wenn du es speichern möchtest, verwende (wie schon erwähnt) _FileWriteLog.
    Übrigens brauchst du ja das "ConsoleWrite($variable)" nicht mal selbst zu schreiben. ;) Einfach den Cursor auf die Variable setzen und "Alt+D" drücken. Dann wird unter der aktuellen Zeile eingefügt:

    [autoit]

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Variable = ' & $Variable & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]

    Nur bei Arrays mußt du "[n]" ergänzen.

  • PixelSearchFile (^^)

    • BugFix
    • 24. Oktober 2010 um 20:40
    Zitat von nof@ker2

    Kennt jemand vielleicht schon ein OCR das man mit AutoIt "ansprechen" kann , wenn ja wie ? Oder gibt es schon UDFs ?


    Vielleicht hilft dir das: OCR, Zeichenerkennung, Bild scannen, auslesen

  • AlignComment richtet Kommentare aus Update 13.08.2016

    • BugFix
    • 24. Oktober 2010 um 20:31

    Andy
    Ich hatte ja mal ein Skript zur automatischen Variablendeklaration erstellt (Variablendeklaration automatisiert - Opt("MustDeclareVars", 1)). Da ist die Unterscheidung nach Kommentaren anhand #cs - #ce, #comments-start - #comments-end und ";" enthalten. Vielleicht kannst du das ja verwerten.

  • mehrere Guis organisieren

    • BugFix
    • 24. Oktober 2010 um 20:16
    Zitat von Ilse

    danke für dein Beispiel.
    Du hast aber kein Koda benutzt.


    Hallo Ilse, spätestens dein jetziges Projekt zeigt dir die Unwägbarkeiten von Koda. Für Anfänger ist Koda sicher ein probates Hilfsmittel. Aber gerade wenn du mehre GUI einbinden willst, mußt du aus dem produzierten Code wieder viel rauslöschen. Mach es lieber gleich von Hand. Das schärft dein Verständnis und dein Vorstellungsvermögen. Ich habe Koda bestimmt schon seit zwei Jahren nicht mehr verwendet. Übrigens kannst du vieles mit Abbrevs lösen ("setupgui" ist z.B. bereits enthalten, kannst du beliebig erweitern).

  • Kann Autoit warten, bis USB-Stick eingesteckt ist?

    • BugFix
    • 24. Oktober 2010 um 14:38
    Zitat von moritz1243

    Mach es lieber mit dieser Funktion DriveGetSerial ( "path" )


    Eindeutig die schlechtere Option. Eine Großzahl der USB-Sticks hat überhaupt keine Seriennummer. ;)

  • Flaches Datenformat in Tabelle Konvertieren

    • BugFix
    • 23. Oktober 2010 um 16:28

    - 2D Array ( $array[2][4] ) deklarieren mit 4 Spalten (KWS, NFA, GHR, PST)
    - Zeilen-Index 0 und 1 entsprechen deinen "S73" und "A89"
    - Datei einlesen mit _FileReadToArray
    - in einer Schleife durchgehen ( For $i = 1 To $aRead[0] )
    - Spalte = StringLeft( $aRead[$i], 3) (KWS=0, NFA=1...)
    - wenn in $aRead[$i] "S73" enthalten (StringInStr) dann Index 0 sonst Index 1
    - in Array an [Index][Spalte] eintragen: die letzten 5 Zeichen (StringRight) von $aRead[$i]

  • Erweiterte Dateiinfo (eine Datei od. alle eines Ordners)

    • BugFix
    • 23. Oktober 2010 um 12:05
    Zitat von pretrojaner

    Das Setzten der Dateiinformationen müsste im Grunde auch irgentwie gehen


    Das wird niemals mit einer Funktion möglich sein, da diese Informationen direkt abhängig vom Dateityp sind.

  • MouseGetPos - relativ + Berücksichtigung Caption

    • BugFix
    • 23. Oktober 2010 um 11:58

    Habe noch 'nen Fehler entdeckt. Ich war der irrigen Meinung, Caption wird von zwei Border umschlossen. Ist tatsächlich nur einmal.
    Folgende Codezeile:

    [autoit]

    If $fAddTitleHeight Then $iTitleHeight += 2*$iBorder

    [/autoit]

    muß also richtig heißen:

    [autoit]

    If $fAddTitleHeight Then $iTitleHeight += $iBorder

    [/autoit]

    Dann paßt es auch.

  • Transparente Buttons

    • BugFix
    • 21. Oktober 2010 um 18:55
    Zitat von Ilse

    Wirklich schade, warum das nicht so einfach geht wie ich gedacht habe.
    Transparentes gif auf die Gui, onClick... Code fertig.


    Im Prinzip ist doch das genau der Fall, nur dass halt gar kein gif da ist. ;)
    Auch bei einem gif müsstest du, wenn du die GUI resizeable gestaltest, ein Sizemanagement gestalten. Und das ist es, was das Skript jetzt so gewaltig aussehen läßt. Bei einer GUI fixer Größe ist das wesentlich unkomplizierter. Ich gestatte es dem User niemals, die Größe zu verändern. :D

  • wer hat mit dieser UDF erfahrung? _INetSmtpMailCom

    • BugFix
    • 21. Oktober 2010 um 18:45
    Zitat von Tigger1975

    und das bedeutet doch das wenn der Username leer ist keine Verwendet wird.


    Das bedeutet, dass an der Stelle des Skriptes die von dir angegebenen Userdaten Verwendung finden. Und ganz dick REQUIRED (erforderlich) ist eigentlich nicht zu übersehen. ;)

  • wer hat mit dieser UDF erfahrung? _INetSmtpMailCom

    • BugFix
    • 21. Oktober 2010 um 18:40
    Zitat von Tigger1975

    ich habe das script orginal verwendet.
    Nur ip vom localen Mailserver eingetragen und eine gültige toaddress.


    Das reicht aber nicht.

    Zitat
    [autoit]

    $Username = "******" ; username for the account used from where the mail gets sent - REQUIRED
    $Password = "********" ; password for the account used from where the mail gets sent - REQUIRED

    [/autoit]
  • MouseGetPos - relativ + Berücksichtigung Caption

    • BugFix
    • 21. Oktober 2010 um 17:49

    Hi,
    da MouseGetPos uns mit der Standard Opt('MouseCoordMode') die absoluten Koordinaten liefert und ich i.A. nicht für das ganze Skript den Modus ändern möchte, habe ich mal die Schritte (Mode wechseln, Koordinaten ermitteln, zurück zu altem Mode) in einer Funktion zusammengefasst mit einem optionalen Parameter zur Berücksichtigung (einer evtl. vorhandenen) Titelleiste. Denn das Fenster beginnt für die relativen Koordinaten am Fensterrand.
    Falls ein randloser Style verwendet wird, gibt es hier kleine Differenzen. Da ich die Positionsabfrage aber selten pixelgenau benötige, ist das wenig dramatisch.
    Syntax (und Rückgabe) identisch zu MouseGetPos, zusätzlicher Parameter True/False für Titelhöhe berücksichtigen.
    Falls es wer braucht:

    Spoiler anzeigen
    [autoit]

    Func _MouseGetPosRel($i=-1, $fAddTitleHeight=False)
    Local $ret, $iTitleHeight = 0, $iBorder
    If $fAddTitleHeight Then
    ; === Höhe Caption
    $ret = DllCall("user32.dll", "long", "GetSystemMetrics", "long", 4)
    $iTitleHeight = $ret[0]
    EndIf
    ; === Höhe Border
    $ret = DllCall("user32.dll", "long", "GetSystemMetrics", "long", 6)
    $iBorder = $ret[0]
    If $fAddTitleHeight Then $iTitleHeight += 2*$iBorder
    Local $old = Opt('MouseCoordMode', 0)
    Local $aM = MouseGetPos()
    Opt('MouseCoordMode', $old)
    Switch $i
    Case 0
    Return $aM[0] -$iBorder
    Case 1
    Return $aM[1] -$iTitleHeight
    Case Else
    $aM[0] -= $iBorder
    $aM[1] -= $iTitleHeight
    Return $aM
    EndSwitch
    EndFunc

    [/autoit]

    Es funktioniert für XP, aber wie ich schon gehört habe, liefert Systemmetrics bei Win7 wohl fehlerhafte Werte. Könnt ihr ja testen.

  • Problem mit Konvertierungsskript(EBCDIC zu ASCII)

    • BugFix
    • 21. Oktober 2010 um 16:48

    Mal als Tipp: Häng deine Datei nicht an (so groß ist sie nicht), sondern füge den Code in entsprechenden Tags in deinen Post ein. Dann hast du größere Chancen, dass es sich jemand anschaut. Ich lade z.B. keine Skripts runter um dadrin nach Fehlern zu suchen. :whistling:

  • Transparente Buttons

    • BugFix
    • 21. Oktober 2010 um 16:32

    OK, hier mal ein kpl. Bsp.:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Local $dll, $ret, $TitleHeight
    $dll = DllOpen("user32.dll")
    $ret = DllCall($dll, "long", "GetSystemMetrics", "long", 4)
    $TitleHeight = $ret[0]
    $ret = DllCall($dll, "long", "GetSystemMetrics", "long", 6)
    $TitleHeight += 2*$ret[0]
    DllClose($dll)

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

    Global $GUI, $aGUI, $aClick[2][6] = [ _
    [0,0 +$TitleHeight,50,20], _ ; Klickbereich1 [x,y,w,h,FaktorX,FaktorY] Index: 0
    [0,100 +$TitleHeight,50,20]] ; Klickbereich2 Index: 1
    ; Die Klickbereiche sind deine "Pseudo-Button"

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

    $GUI = GUICreate('Main', 255, 150, -1, -1, $WS_SIZEBOX)
    $aGUI = WinGetPos($GUI) ; Größendaten GUI zum Vergleich speichern

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

    ; die Label nur damit man nicht allzu blind klicken muß
    GUICtrlCreateLabel('|', 0, 0) ; Abgrenzung Label beim Start
    GUICtrlCreateLabel('|', 51, 0) ; Abgrenzung Label beim Start
    GUICtrlCreateLabel('|', 0, 100)
    GUICtrlCreateLabel('|', 51, 100)

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

    ; === Größenverhältnis Klickbereich W u. H / GUI W u. H abspeichern
    For $i = 0 To 1
    $aClick[$i][4] = $aClick[$i][2]/$aGUI[2] ; Verhältnis W
    $aClick[$i][5] = $aClick[$i][3]/$aGUI[3] ; Verhältnis H
    ConsoleWrite($i & ': ' & $aClick[$i][4] & '/ ' & $aClick[$i][5] & @CRLF)
    Next

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

    GUISetState(@SW_SHOW, $GUI)

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

    GUIRegisterMsg($WM_SIZE, '_mySize')

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    Switch _GetClickedIndex($aClick)
    Case 0
    ConsoleWrite('Klickbereich 1: ' & $aClick[0][0] & ', ' & $aClick[0][1] -$TitleHeight & ', ' & _
    $aClick[0][2] & ', ' & $aClick[0][3] & @CRLF)
    Case 1
    ConsoleWrite('Klickbereich 2: ' & $aClick[1][0] & ', ' & $aClick[1][1] -$TitleHeight & ', ' & _
    $aClick[1][2] & ', ' & $aClick[1][3] & @CRLF)
    Case Else
    ConsoleWrite('Klick außerhalb' & @CRLF)
    EndSwitch
    EndSwitch
    WEnd

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

    Func _GetClickedIndex(ByRef $aClick)
    $old = Opt('MouseCoordMode', 0)
    Local $aM = MouseGetPos()
    Opt('MouseCoordMode', $old)
    For $i = 0 To UBound($aClick) -1
    If ( $aM[0] >= $aClick[$i][0] ) And ( $aM[0] <= $aClick[$i][0] +$aClick[$i][2] ) And _
    ( $aM[1] >= $aClick[$i][1] ) And ( $aM[1] <= $aClick[$i][1] +$aClick[$i][3] ) Then Return $i
    Next
    Return -1
    EndFunc

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

    Func _mySize($hWnd)
    If $hWnd <> $GUI Then Return 0
    Local $aSize = WinGetPos($GUI)
    For $i = 0 To UBound($aClick) -1
    ;~ ConsoleWrite('W/H vorher: ' & $aClick[$i][2] & ' / ' & $aClick[$i][3] & @CRLF)
    $aClick[$i][2] = Int($aSize[2] * $aClick[$i][4])
    $aClick[$i][3] = Int($aSize[3] * $aClick[$i][5])
    ;~ ConsoleWrite('W/H nachher: ' & $aClick[$i][2] & ' / ' & $aClick[$i][3] & @CRLF)
    Next
    $aGUI = $aSize
    Return 0
    EndFunc

    [/autoit]
  • Transparente Buttons

    • BugFix
    • 21. Oktober 2010 um 13:50
    Zitat von Ilse

    Wenn ich das Script starte, dann wird zuerst der Button kurz mit 100% gezeigt
    und dann wird er erst transparent.


    Passiert bei mir nicht. Vielleicht vom Windows-Style abhängig (habe Classic).
    Kannst ja auch mal testen erst GUISetState für Main und dann für Child auszuführen.

    Bei Trans 5 ist von dem Button ja gar nix mehr zu sehen. Ist das Absicht? Falls ja, brauchst du also nur einen "Klickbereich" der als Button verwertet wird. Das geht aber dann einfacher. (Koordinatenbereich definieren und in Schleife Mausklick auswerten - wenn im Koordinatenbereich dann...)

  • Erweiterte Dateiinfo (eine Datei od. alle eines Ordners)

    • BugFix
    • 21. Oktober 2010 um 11:15
    Zitat von Kleiner

    wie weit hast du getestet der DateiInfo´s du gibst ja ein 34 spalten Array


    Ich hatte in den Quellen nur die Angabe zu 34 Details gefunden. Kann sein, dass mit Win7 mehr hinzugekommen ist.

    Edit: Hierfindet ihr eine Listung der Details nach Betriebssystem.

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™