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

  • Doppelte Zahlen

    • BugFix
    • 21. Oktober 2010 um 10:54
    Zitat von Der_Doc

    Meine Frage zwecks den Objekten war nicht so gemeint ob es schneller oder schöner ist sonder ob es proktikabler ist.


    Entscheide selbst:

    kurzer Vergleich Array/Dictionary-Objekt
    [autoit]

    ; === Erstellen Array und Dictionary-Objekt
    ; === 2D-Array, da Dictionary eine Schlüssel-Wert Verwaltung ist
    Local $array[1][2], $oSD = ObjCreate('Scripting.Dictionary')
    ; === Array wird über Index angesprochen
    ; === Dictionary wird direkt über den Schlüssel angesprochen

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

    ; === Werte eintragen
    ; === Array
    If $array[UBound($array)-1][0] <> '' Then ReDim $array[UBound($array)+1][2]
    $array[UBound($array)-1][0] = 'Schlüssel'
    $array[UBound($array)-1][1] = 'Wert'

    ; === Dictionary
    $oSD.Add('Schlüssel', 'Wert')

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

    ; === Wert ausgeben
    ; === Array
    $index = _ArraySearch($array, 'Schlüssel')
    ConsoleWrite($array[$index][1] & @CRLF)

    ; === Dictionary
    ConsoleWrite($oSD.Item('Schlüssel') & @CRLF)

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

    ; === Wert löschen
    ; === Array
    $index = _ArraySearch($array, 'Schlüssel')
    _ArrayDelete($array, $index)

    ; === Dictionary
    $oSD.Remove('Schlüssel')

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

    ; === Überprüfen ob Schlüssel existiert
    ; === Array
    _ArraySearch($array, 'Schlüssel')
    If @error Then
    ConsoleWrite('Existiert nicht' & @CRLF)
    Else
    ConsoleWrite('Existiert' & @CRLF)
    EndIf

    ; === Dictionary
    If $oSD.Exists('Schlüssel') Then
    ConsoleWrite('Existiert' & @CRLF)
    Else
    ConsoleWrite('Existiert nicht' & @CRLF)
    EndIf

    [/autoit]

    Mehr findest du hier: Objekt: Scripting.Dictionary

  • Problem mit _ExcelReadCell

    • BugFix
    • 21. Oktober 2010 um 09:51

    Das Problem entsteht m.M. weil du ab dem zweiten mal versuchst eine bereits geöffnete Datei nochmal zu öffnen.
    Hier ein Bsp., wie es funktioniert (Speichern u. Schließen hab ich nicht integriert, da du vermutlich dieses von Hand machst).

    [autoit]

    Local $oExcel, $oWorkBook
    Local $sFile = "C:\Test.xls" ; die zu bearbeitende XLS
    Local $sSheet = "Tabelle2", $sCell = "A2"

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

    #region - der folgende Bereich muß bei dir dann in einer (zeitgesteuerten) Schleife laufen um immer wieder zu lesen -----------------

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

    ; === 1. versuchen auf ein Excel-Objekt zuzugreifen, falls dieses existiert
    $oWorkBook = ObjGet($sFile, "Excel.Application")
    If @error Then ; Datei noch nicht in Excel geöffnet
    ; === Excel-Objekt neu erstellen
    $oExcel = ObjCreate("Excel.Application")
    ; === gewünschte Datei öffnen
    $oWorkBook = $oExcel.Workbooks.Open($sFile)
    EndIf

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

    ; === Hier kannst du in deine INI schreiben
    ConsoleWrite($oWorkBook.Sheets($sSheet).Range($sCell).Value & @CRLF)

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

    #endregion -------------------------------------------------------------------------------

    [/autoit]
  • Moderation für neue Mitglieder (Shoutbox)

    • BugFix
    • 20. Oktober 2010 um 20:29
    Zitat von Der_Doc

    Oscar was habe ich denn anders gesagt? ?(

    MfG
    Der_Doc


    In der SB sollen die betreffenden Einträge nicht gelöscht werden. Sonst können diese im Nachhinein nicht mehr bewertet werden.

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™