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

  • Stdout einer Datei lesen

    • BugFix
    • 6. März 2011 um 14:13
    Zitat von PrideRage

    BugFix : Doch, mit AutoIt kann man Environment Variablen schreiben, EnvSet()


    Du kannst nur eigene, von deinem AutoIt-Skript erstellte Umgebungsvariablen verwenden. Auf die Systemvariablen (TEMP, PATH etc.) hast du nur Lesezugriff.

  • Drucken Problem

    • BugFix
    • 6. März 2011 um 09:57

    Die Ahnung geht in die richtige Richtung, genau dadrüber liegt der Hund begraben. ;)
    Die von dir angeführte Befehlszeile druckt aus. In den Zeilen dadrüber ( DllStructSetData($RECT, .... ) wird der Druckbereich in Form eines Rectangle (Rechteck) festgelegt.
    Die heute gängigen Drucker drucken nicht in Zeilen und Spalten - sie drucken Bilder. Aus diesem Grund wird das Rechteck in dem das Textabbild dargestellt wird definiert.
    Ausnahmen findest du in Form von Typenraddruckern oder Nadeldruckern meist in Arztpraxen zum Rezeptdruck. Die Dinger kann man noch richtig hardcodiert mit Zeile & Spalte ansprechen.

    Spiele einfach mal mit den Werten für das Rectangle - dann merkst du am Besten, wie es funktioniert.

  • Stdout einer Datei lesen

    • BugFix
    • 6. März 2011 um 09:09

    Erstelle doch mit deinem C++ Programm eine Systemvariable (Env) in der du deine Ergebnisse parkst. Mit EnvGet() kannst du dir die Werte dann im AutoIt Skript einlesen.
    Falls es mit C++ nicht möglich sein sollte eine eigene Systemvariable zu setzen (kann ich mir eigentlich nicht vorstellen), kannst du ja auch TEMP dafür nutzen.
    Nur andersrum geht es leider nicht. Die Ersteller von AutoIt haben uns die Tür zum Schreiben in Systemvariablen (warum auch immer) verschlossen. Zumindest bieten die Standardfunktionen dazu keine Möglichkeit.

  • Zufälliger Satz?

    • BugFix
    • 6. März 2011 um 09:00

    Falls du sicher gehen möchtest, dass derselbe Satz nicht mehrfach hintereinander ausgegeben wird (bei geringer Anzahl recht große Wahrscheinlichkeit), kannst du das auch anders lösen:

    [autoit]

    Local $aSaetze[4] = [ _
    "Das ist Satz 1.", _
    "Das ist Satz 2.", _
    "Das ist Satz 3.", _
    "Das ist Satz 4."]

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

    ; LeerString in den der ZufallsIndex geschrieben wird
    Local $sIndex = ''
    Local $iRandom, $iCount = 0

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

    Do
    $iRandom = Random(0, UBound($aSaetze)-1, 1)
    If Not StringInStr($sIndex, $iRandom, 1) Then
    $sIndex &= $iRandom & " "
    $iCount += 1
    ConsoleWrite($aSaetze[$iRandom] & @crlf)
    EndIf
    Until $iCount = UBound($aSaetze)

    [/autoit]
  • Array Problem

    • BugFix
    • 5. März 2011 um 20:31

    Hast du mal die Ausgabe des gesamten Textes angeschaut? Eine Darstellung in einem 2D-Array ist dafür nicht sonderlich geeignet. Es sei denn du erweiterst die 2.te Dimension auf die max. Anzahl der Unterpunkte.
    Denn das Ergebnis sieht z.B. so aus (Ausschnitt), ein Splitten an : geht da auch voll in die Hose ;) :

    Code
    Netzwerkkarte(n):                              4 Netzwerkadapter installiert.
                                                   [01]: Marvell Yukon 88E8042 PCI-E Fast Ethernet Controller
                                                         Verbindungsname: LAN-Verbindung
                                                         Status:          Medien getrennt
                                                   [02]: Broadcom 802.11b/g-Netzwerkadapter
                                                         Verbindungsname: Drahtlosnetzwerkverbindung
                                                         DHCP aktiviert:  Ja
                                                         DHCP-Server:     192.168.1.1
                                                         IP-Adresse(n)
                                                         [01]: 192.168.1.30
                                                         [02]: fa80::12c3:51c9:b424:e2b7
                                                   [03]: Bluetooth Device (Personal Area Network)
                                                         Verbindungsname: Bluetooth-Netzwerkverbindung
                                                         Status:          Medien getrennt
                                                   [04]: Microsoft Virtual WiFi Miniport Adapter
                                                         Verbindungsname: Drahtlosnetzwerkverbindung 2
                                                         Status:          Medien getrennt
    Alles anzeigen
  • Notepad++ und AutoIt

    • BugFix
    • 4. März 2011 um 23:59

    Übrigens, hier noch etwas absolut Geniales in NPP!! ==> der Blockeditor!
    Bsp.

    [autoit]

    $test[] = ""
    $test[] = ""
    $test[] = ""
    $test[] = ""
    $test[] = ""

    [/autoit]


    - den Cursor in das erste eckige Klammernpaar setzen
    - Alt+Shift drücken
    - mit Pfeil abwärts bis zum untersten Klammernpaar bewegen ( Alt+Shift gedrückt halten! ), eine Markierung ist dabei NICHT zu sehen.
    - Alt+C drücken ==> Blockeditor wird aufgerufen
    - Startwert und Schrittweite eingeben -- Ausführen
    und schwupps, alles ist ausgefüllt. Saugeil :thumbup:

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.


    Mit Alt+Shift kann man super Spalten markieren, z.B. 5 Zeichen nebeneinander normal markieren und dann mit gedrückter Alt+Shift über die Pfeil abwärts Taste mehrere Zeilen auswählen. Somit wird der kpl. Block (hier 5 Zeichen breit mal n-Zeilen) markiert und kann kopiert, gelöscht oder ersetzt werden.

    Bilder

    • blockedit2.png
      • 1,96 kB
      • 111 × 118

    Dateien

    blockedit1.png 35,5 kB – 0 Downloads
  • GUI an Desktop andocken

    • BugFix
    • 4. März 2011 um 18:59

    Vielleicht nicht exakt, was du suchst - aber schau es dir mal an: https://autoit.de/index.php?page…79275#post79275

  • Deutsche Zahlenkonvertierung

    • BugFix
    • 3. März 2011 um 21:23

    Möglichkeiten gibt es da einige... ;)

    [autoit]

    Func _NumberFormatThousand($vNumber, $ret='DE') ; bis 18 Vorkommastellen
    Local $sOut = '', $a = StringRegExp(StringReplace($vNumber, '.', ','), "(-?\d{1,3})(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(?:\Z|(,\d+))", 3)
    For $i = 0 To UBound($a) -1
    If $a[$i] <> '' Then $sOut &= '.' & $a[$i]
    Next
    If $ret <> 'DE' Then Return StringTrimLeft(StringReplace(StringReplace($sOut, '.', ','), ',,', '.'), 1)
    Return StringTrimLeft(StringReplace($sOut, '.,', ','), 1)
    EndFunc

    [/autoit]
  • List view sortieren

    • BugFix
    • 2. März 2011 um 23:44
    Bsp.
    [autoit]

    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $hListView, $B_DESCENDING
    GUICreate("ListView SimpleSort by Column Click", 400, 300)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    EndIf
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • eukalyptus ist 32

    • BugFix
    • 2. März 2011 um 20:26

    Häbbieee Bööööhrsdayyyyy! 8o
    Hi eukalyptus, feiere schön und genieße das neue Lebensjahr. Bleib uns noch lange erhalten. :thumbup:

  • Ini ohne Größenbeschränkung

    • BugFix
    • 1. März 2011 um 20:52
    Zitat von SEuBo

    Achso - das soll jetzt in keinster Weise frech o.ä. rüberkommen. Ich will nur helfen


    :D He, so schnell bin ich nicht angepißt. Hier hatte ich einfach verpennt mal in _StringBetween selbst reinzuschauen, denn die macht genau das, was ich vermeiden wollte. :huh:
    Naja, irgendwie bin ich wohl auch nur ein Mensch. :whistling:

  • Ini ohne Größenbeschränkung

    • BugFix
    • 28. Februar 2011 um 18:51

    Ich verstehe deine Frage nicht. Natürlich mußt du per Referenzpunkt die Inhalte separieren. Wenn du das mit RegEx löst mußt du für alle Eventualitäten maskieren. Dadurch wird das Pattern greedy und der Geschwindigkeitsvorteil gegenüber Stringoperationen ist dahin. ;)

  • Schnelleres _ArrayMax auf Numerischer Basis

    • BugFix
    • 27. Februar 2011 um 23:56

    Ähm... ich kann in deinem Code keinen Unterschied zu _ArrayMax entdecken. ?(
    Außer dass bei dir keine Fehlerabfragen und Userdefinierte Start/Endindex enthalten sind.

  • Ini ohne Größenbeschränkung

    • BugFix
    • 27. Februar 2011 um 23:47

    Da diese Frage aufgetaucht war, habe ich mal eine Alternative auf Tag-Basis erstellt mit allen bekannten Ini-Funktionen in exakt derselben Funktionalität.
    Ich habe hierbei bewußt auf die Verwendung von RegEx verzichtet um größtmögliche Vielfalt in Schlüssel und Wert zuzulassen.
    Vielleicht kann es jemand brauchen.

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <File.au3>
    #include <String.au3>

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

    #cs ===== Funktionsliste =======================================================

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

    Erstellen / Verwalten von Schlüssel-Wert-Paaren ohne INI-Größenlimit

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

    Musterdatei:
    <sec>Sektion 1
    <key>Schlüssel 1_1<val>Wert 1_1</val></key>
    <key>Schlüssel 1_2<val>Wert 1_2</val></key>
    <key>Schlüssel 1_3<val>Wert 1_3</val></key>
    <key>Schlüssel 1_4<val>Wert 1_4</val></key>
    </sec>

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

    Funktionen sind identisch zu den bekannten Standard-Ini-Funktionen

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

    _IniEx_ReadSectionNames
    _IniEx_ReadSection
    _IniEx_Read
    _IniEx_RenameSection
    _IniEx_Write
    _IniEx_WriteSection

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

    #ce ============================================================================

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

    ;===============================================================================
    ; Function Name..: _IniEx_ReadSectionNames
    ; Description....: Liest die Sektionsnamen der IniEx-Datei aus
    ; Parameter(s)...: $sPath Pfad zur IniEx-Datei
    ; Return Value(s): Erfolg Array mit den Sektionsnamen, Anzahl in Array[0]
    ; Fehler 0 @error 1 - Datei nicht gefunden
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IniEx_ReadSectionNames($sPath)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $sRead = FileRead($sPath)
    Local $aSec = _StringBetween($sRead, '<sec>', @CRLF)
    Local $aOut[UBound($aSec) + 1]
    $aOut[0] = UBound($aSec)
    For $i = 0 To UBound($aSec) - 1
    $aOut[$i + 1] = $aSec[$i]
    Next
    Return $aOut
    EndFunc ;==>_IniEx_ReadSectionNames

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

    ;===============================================================================
    ; Function Name..: _IniEx_ReadSection
    ; Description....: Liest die angegebene Sektion aus
    ; Parameter(s)...: $sPath Pfad zur IniEx-Datei
    ; $sSection Sektionsname
    ; Return Value(s): Erfolg 2D-Array, Array[0][0] enthält Anzahl, [n][0]=Key, [n][1]=Value
    ; Fehler 0 @error 1 - Datei nicht gefunden
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IniEx_ReadSection($sPath, $sSection)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $fInSection = False, $aIni, $iKeys = 0, $aPairs[1][2] = [[$iKeys]], $aKeyVal, $sKeyVal
    _FileReadToArray($sPath, $aIni)
    For $i = 1 To $aIni[0]
    If Not $fInSection And $aIni[$i] <> '<sec>' & $sSection Then ContinueLoop
    $fInSection = True
    If $aIni[$i] = '</sec>' Then ExitLoop
    If StringLeft($aIni[$i], 5) = '<key>' Then
    $aKeyVal = _StringBetween($aIni[$i], '<key>', '</val></key>')
    If @error Then ContinueLoop
    $aKeyVal = StringSplit($aKeyVal[0], '<val>', 3)
    $iKeys += 1
    ReDim $aPairs[$iKeys + 1][2]
    $aPairs[0][0] = $iKeys
    $aPairs[$iKeys][0] = $aKeyVal[0]
    $aPairs[$iKeys][1] = $aKeyVal[1]
    EndIf
    Next
    Return $aPairs
    EndFunc ;==>_IniEx_ReadSection

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

    ;===============================================================================
    ; Function Name..: _IniEx_Read
    ; Description....: Liest den Wert für den Schlüssel einer Sektion aus
    ; Parameter(s)...: $sPath Pfad zur IniEx-Datei
    ; $sSection Sektionsname
    ; $sKey Schlüsselname
    ; $sDefault Defaultwert, wenn Key nicht gefunden
    ; Return Value(s): Erfolg Wert des Schlüssels
    ; Fehler 0 @error 1 - Datei nicht gefunden
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IniEx_Read($sPath, $sSection, $sKey, $sDefault = 'Default')
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $fInSection = False, $aIni, $iKeys = 0, $aPairs[1][2] = [[$iKeys]], $aKeyVal, $sKeyVal
    _FileReadToArray($sPath, $aIni)
    For $i = 1 To $aIni[0]
    If Not $fInSection And $aIni[$i] <> '<sec>' & $sSection Then ContinueLoop
    $fInSection = True
    If $aIni[$i] = '</sec>' Then ExitLoop
    If StringLeft($aIni[$i], 5) = '<key>' Then
    $aKeyVal = _StringBetween($aIni[$i], '<key>', '</val></key>')
    If @error Then ContinueLoop
    $aKeyVal = StringSplit($aKeyVal[0], '<val>', 3)
    If $aKeyVal[0] = $sKey Then Return $aKeyVal[1]
    EndIf
    Next
    Return $sDefault
    EndFunc ;==>_IniEx_Read

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

    ;===============================================================================
    ; Function Name..: _IniEx_RenameSection
    ; Description....: Umbenennen einer Sektion
    ; Parameter(s)...: $sPath Pfad zur IniEx-Datei
    ; $sSection Sektionsname
    ; $sNewSection neuer Sektionsname
    ; $fOverwrite falls sNewSection bereits besteht wird Inhalt gelöscht, Standard=False
    ; Return Value(s): Erfolg 1
    ; Fehler 0 @error 1 - Datei nicht gefunden
    ; 2 - Sektionsname existiert nicht
    ; 3 - Sektion existiert aber Überschreib-Flag nicht gesetzt
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IniEx_RenameSection($sPath, $sSection, $sNewSection, $fOverwrite = False)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $fExists = False, $fInSection = False, $aIni, $iFirstLine = 0, $iLastLine
    _FileReadToArray($sPath, $aIni)
    For $i = 1 To $aIni[0] ; check ob $sNewSection bereits existiert
    If $aIni[$i] = '<sec>' & $sNewSection Then
    $fExists = True
    ExitLoop
    EndIf
    Next
    For $i = 1 To $aIni[0]
    If Not $fInSection And $aIni[$i] = '<sec>' & $sSection Then ; Sektion Startzeile suchen
    $fInSection = True
    $iFirstLine = $i
    ContinueLoop
    EndIf
    If $fInSection And Not $fExists Then ExitLoop ; $sNewSection existiert noch nicht >> Endzeile braucht nicht ermittelt werden
    If $fInSection And $aIni[$i] = '</sec>' Then ; Sektion Endzeile suchen
    $iLastLine = $i
    $fInSection = False
    ExitLoop
    EndIf
    Next
    If $iFirstLine = 0 Then Return SetError(2, 0, 0) ; Sektionsname nicht enthalten
    If Not $fExists Then Return _FileWriteToLine($sPath, $iFirstLine, '<sec>' & $sNewSection, 1)
    If $fExists And Not $fOverwrite Then
    Return SetError(3, 0, 0) ; $sNewSection existiert aber Überschreib-Flag nicht gesetzt
    Else ; alte Sektion kpl. löschen
    For $i = $iLastLine To $iFirstLine Step -1
    _FileWriteToLine($sPath, $iFirstLine, '', 1)
    Next
    EndIf
    _FileReadToArray($sPath, $aIni)
    For $i = 1 To $aIni[0]
    If Not $fInSection And $aIni[$i] = '<sec>' & $sNewSection Then ; Sektion Startzeile suchen
    $fInSection = True
    $iFirstLine = $i
    ContinueLoop
    EndIf
    If Not $fExists Then ExitLoop ; $sNewSection existiert noch nicht >> Endzeile braucht nicht ermittelt werden
    If $fInSection And $aIni[$i] = '</sec>' Then ; Sektion Endzeile suchen
    $iLastLine = $i
    $fInSection = False
    ExitLoop
    EndIf
    Next
    For $i = $iLastLine - 1 To $iFirstLine + 1 Step -1 ; Sektion mit selbem Namen, wie $sNewSection leeren
    _FileWriteToLine($sPath, $i, '', 1)
    Next
    Return 1
    EndFunc ;==>_IniEx_RenameSection

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

    ;===============================================================================
    ; Function Name..: _IniEx_Write
    ; Description....: Schreibt einen neuen Wert in einen Schlüssel oder fügt ein neues Schlüssel-Wert-Paar ein
    ; Parameter(s)...: $sPath Pfad zur IniEx-Datei
    ; $sSection Sektionsname
    ; $sKey Schlüsselname
    ; $sValue Wert
    ; Return Value(s): Erfolg Letzter Wert des Schlüssels, bei Neuanlage Leerstring
    ; Fehler 0 @error 1 - Datei nicht gefunden
    ; 2 - Sektion existiert nicht
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IniEx_Write($sPath, $sSection, $sKey, $vValue)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $fInSection = False, $aIni, $aKeyVal, $vOldVal = '', $fKeyNew = False, $iKeyLine = 0
    _FileReadToArray($sPath, $aIni)
    For $i = 1 To $aIni[0]
    If Not $fInSection And $aIni[$i] = '<sec>' & $sSection Then ; Sektion Startzeile suchen
    $fInSection = True
    ContinueLoop
    EndIf
    If $fInSection And StringLeft($aIni[$i], 5) = '<key>' Then
    $aKeyVal = _StringBetween($aIni[$i], '<key>', '</val></key>')
    $aKeyVal = StringSplit($aKeyVal[0], '<val>', 3)
    If $aKeyVal[0] = $sKey Then
    $iKeyLine = $i
    $vOldVal = $aKeyVal[1]
    ExitLoop
    EndIf
    EndIf
    If $fInSection And $aIni[$i] = '</sec>' Then ; Sektionsende
    If $iKeyLine = 0 Then
    $fKeyNew = True
    $iKeyLine = $i
    EndIf
    ExitLoop
    EndIf
    Next
    If Not $fInSection Then Return SetError(2, 0, 0) ; Sektion existiert nicht
    If $fKeyNew Then
    _FileWriteToLine($sPath, $iKeyLine, '<key>' & $sKey & '<val>' & $vValue & '</val></key>')
    Else
    _FileWriteToLine($sPath, $iKeyLine, '<key>' & $sKey & '<val>' & $vValue & '</val></key>', 1)
    EndIf
    Return $vOldVal ; Rückgabe alter Wert
    EndFunc ;==>_IniEx_Write

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

    ;===============================================================================
    ; Function Name..: _IniEx_WriteSection
    ; Description....: Schreibt eine Sektion in die IniEx-Datei
    ; Parameter(s)...: $sPath Pfad zur IniEx-Datei
    ; $sSection Sektionsname
    ; $vData String (Schlüssel=Wert, mehrere mit @LF trennen) oder Array [n][0]= Schlüssel, [n][1]= Wert
    ; $iIndex Falls Array übergeben, der Startindex (Default=1)
    ; Return Value(s): Erfolg 1
    ; Fehler 0 @error 1 - Datei nicht gefunden
    ; 2 - kein 2D-Array übergeben
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IniEx_WriteSection($sPath, $sSection, $vData, $iIndex = 1)
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)
    Local $aIni, $aTmp, $aSplit, $aData[1][2] = [[0]], $sSectionData
    Local $fInSection = False, $iFirstLine = 0, $iLastLine, $sRead, $fh
    If Not IsArray($vData) Then ; Daten in Array packen
    $aTmp = StringSplit($vData, @LF, 1)
    ReDim $aData[$aTmp[0] + 1][2]
    $aData[0][0] = $aTmp[0]
    For $i = 1 To $aTmp[0]
    $aSplit = StringSplit($aTmp[$i], '=')
    $aData[$i][0] = $aSplit[1]
    $aData[$i][1] = $aSplit[2]
    Next
    Else
    If UBound($aData, 2) <> 2 Then Return SetError(2, 0, 0)
    $aData = $vData
    EndIf
    _FileReadToArray($sPath, $aIni)
    For $i = 1 To $aIni[0] ; check ob $sSection bereits existiert
    If $aIni[$i] = '<sec>' & $sSection Then
    $iFirstLine = $i
    $fInSection = True
    EndIf
    If $fInSection And $aIni[$i] = '</sec>' Then ; Sektion Endzeile suchen
    $iLastLine = $i
    $fInSection = False
    EndIf
    Next
    $sSectionData = '<sec>' & $sSection & @CRLF ; zu schreibenden Sektions-String zusammenstellen
    For $i = $iIndex To UBound($aData) - 1
    $sSectionData &= '<key>' & $aData[$i][0] & '<val>' & $aData[$i][1] & '</val></key>' & @CRLF
    Next
    $sSectionData = $sSectionData & '</sec>'
    If $iFirstLine > 0 Then ; Sektion besteht bereits
    For $i = $iLastLine To $iFirstLine + 1 Step -1
    _FileWriteToLine($sPath, $iFirstLine, '', 1)
    Next
    Return _FileWriteToLine($sPath, $iFirstLine, $sSectionData, 1) ; Sektion neu schreiben
    Else ; neue Sektion am Ende anfügen
    $fh = FileOpen($sPath, 1)
    FileWrite($fh, @CRLF & $sSectionData)
    Return FileClose($fh)
    EndIf
    EndFunc ;==>_IniEx_WriteSection

    [/autoit]

    Dateien

    IniEx.au3 11,8 kB – 195 Downloads
  • IRC Nachrichten "auslesen"

    • BugFix
    • 27. Februar 2011 um 19:28

    So, wie du die MsgBoxen gesetzt hast, erfährst du niemals, was in dem Skript passiert.
    Egal was passiert - du gibst stets dieselbe Nachricht aus. Also hab ich auch nicht die geringste Ahnung, was genau du erreichen willst und was stattdessen passiert.

  • IRC Nachrichten "auslesen"

    • BugFix
    • 27. Februar 2011 um 15:33

    Ich zeig dir mal meine (etwas bereinigte) Auswerteschleife.
    Ist eigentlich selbsterklärend, ich übergebe z.B. Nick und Message an Auswertefunktionen.

    Spoiler anzeigen
    [autoit]

    While 1
    $recv = TCPRecv($sock, 8192)
    If @error Then
    If Not $Quit_Done Then _FileWriteLog($errLog, "Server has errored or disconnected")
    Exit
    EndIf
    Local $sData = StringSplit($recv, @CRLF)
    For $i = 1 To $sData[0] Step 1
    Local $sTemp = StringSplit($sData[$i], " ")
    If $sTemp[1] = "" Then ContinueLoop
    If $sTemp[1] = "PING" Then _IRCPing($sock, $sTemp[2])
    If $sTemp[0] <= 2 Then ContinueLoop
    Switch $sTemp[2]
    Case "266"
    _IRCJoinChannel ($sock, $channel)
    If IniRead($INI, 'bot', 'auto_identify', 0) = 1 Then _
    _IRCSendMessage($sock, 'IDENTIFY ' & IniRead($INI, 'bot', 'pass', ''), 'NickServ')
    _IRCSendMessage($sock, "Hallo, ich bin der liebe " & $nick & "!", $channel)
    _IRCChangeMode ($sock, IniRead($INI, 'bot', 'mode', '+i'), $channel, $nick)
    Case "332" ; Raumthema
    $thema = ''
    For $k = 5 To $sTemp[0]
    If $k = 5 Then $sTemp[$k] = StringTrimLeft($sTemp[$k], 1)
    $thema &= $sTemp[$k] & ' '
    Next
    If StringStripWS($thema, 3) <> '' Then _IRCSendMessage($sock, "Unser Thema heute: " & $thema, $channel)
    Case 'PRIVMSG'
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $text = ''
    $txtUSER = ''
    For $k = 4 To $sTemp[0]
    $text &= $sTemp[$k] & ' '
    Next
    $text = StringTrimLeft($text, 1)
    $text = StringStripWS($text, 2)
    If StringInStr($text, 'ACTION', 1) Then
    $text = StringTrimLeft($text, 8)
    $text = StringLeft($text, StringLen($text)-2)
    _AuswertungAction($USER)
    $startIdle = TimerInit()
    ElseIf StringInStr($text, 'DCC CHAT', 1) Then
    ;~ ConsoleWrite('DCC: ' & $text & @CRLF)
    $text = 'DCC-Chatanfrage von ' & $USER
    Else
    ;~ ConsoleWrite('Else PrivMsg: ' & $text & @CRLF)
    _AuswertungText($USER)
    $startIdle = TimerInit()
    EndIf
    Case 'NOTICE'
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $text = ''
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    If $k = 4 Then
    $text &= StringTrimLeft($sTemp[$k], 1) & ' '
    Else
    $text &= $sTemp[$k] & ' '
    EndIf
    Next
    $text = StringTrimRight($text, 1)
    EndIf
    _AuswertungNotiz($USER, $text)
    $startIdle = TimerInit()
    Case 'JOIN'
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    _AuswertungJoin($USER)
    $startIdle = TimerInit()
    Case 'NICK'
    $USER_alt = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $USER = StringTrimLeft($sTemp[3], 1)
    _AuswertungNick($USER_alt, $USER)
    $startIdle = TimerInit()
    Case 'PART'
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $txt = $USER & ' verläßt den Chatraum '
    $text = ''
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    If $k = 4 Then
    $text &= StringTrimLeft($sTemp[$k], 1) & ' '
    Else
    $text &= $sTemp[$k] & ' '
    EndIf
    Next
    $text = StringTrimRight($text, 1)
    EndIf
    _AuswertungPartQuit($USER)
    $startIdle = TimerInit()
    Case 'QUIT'
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $txt = $USER & ' verläßt den Chatraum '
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    $text &= $sTemp[$k] & ' '
    Next
    $text = StringTrimRight($text, 1)
    $text = $txt & $text
    EndIf
    _AuswertungPartQuit($USER)
    $startIdle = TimerInit()
    EndSwitch
    Next
    WEnd

    [/autoit]
  • Attribute von _GUIImageList_Add und _GUICtrlListView_AddItem

    • BugFix
    • 26. Februar 2011 um 21:46
    Zitat von autoBert

    bin aber trotzdem überzeugt dass sie funktionieren würde,


    Richtig! ;)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>

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

    Local $hImage, $ListView, $hListView

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

    GUICreate("ListView Set Image List", 400, 300)
    $ListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    $hListView = GUICtrlGetHandle($ListView)

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_AddColumn($hListView, "Column 1", 100)
    _GUICtrlListView_AddColumn($hListView, "Column 2", 100)
    _GUICtrlListView_AddColumn($hListView, "Column 3", 100)

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

    ; Add items
    For $i = 0 To 10
    _GUICtrlListView_AddItem($hListView, "Item " & $i+1, $i)
    _GUICtrlListView_AddSubItem($hListView, $i, 'Sub ' & $i+1 & '-1', 1)
    _GUICtrlListView_AddSubItem($hListView, $i, 'Sub ' & $i+1 & '-2', 2)
    Next

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

    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    GUISetState()

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $hWndFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hListView Then
    Switch $iCode
    Case $NM_CUSTOMDRAW
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    Switch Mod($iItem, 2)
    Case 0 ; geradzahlig
    DllStructSetData($tCustDraw, 'clrTextBk', 0x23FFFF)
    Case 1 ; ungeradzahlig
    DllStructSetData($tCustDraw, 'clrTextBk', 0x0044FF)
    EndSwitch
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Komplette GUIListView auslesen

    • BugFix
    • 26. Februar 2011 um 20:50

    Das geht so:

    Beispiel
    [autoit]

    #include<GUIListview.au3>
    #include<Array.au3>
    $gui = GUICreate('')
    $Listview = GUICtrlCreateListView('A|B', 10, 10, 300, 200)
    $hListview = GUICtrlGetHandle($Listview)
    For $i = 0 To 20
    GUICtrlCreateListViewItem(Random(1000, 9999, 1) & '|' & Random(1000, 9999, 1), $Listview)
    Next
    $bToArray = GUICtrlCreateButton('Read To Array', 10, 230, 130, 20)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $bToArray
    $count = _GUICtrlListView_GetItemCount($hListview)
    Local $aLV[$count][2]
    For $i = 0 To $count -1
    $tmpArray = _GUICtrlListView_GetItemTextArray($hListview, $i)
    $aLV[$i][0] = $tmpArray[1]
    $aLV[$i][1] = $tmpArray[2]
    Next
    _ArrayDisplay($aLV)
    EndSwitch
    WEnd

    [/autoit]
  • Funkey Schrift Generator - ∫ЦηκΣλ S(ЧRЇ∫τ ςΣηΣRΛτ0R

    • BugFix
    • 25. Februar 2011 um 21:45

    [OT]

    Zitat von campweb

    Code um 100% kürzer


    100 - 100 = 0 :rofl:
    Dir ist ein großer Wurf gelungen - Code der Null % Platz beansprucht. Respekt :thumbup:
    [/OT]

  • Endloser Fortschrittsbalken

    • BugFix
    • 24. Februar 2011 um 21:50

    Ich hatte mir dazu eine "SwipBar" aus Labels gebastelt:

    Spoiler anzeigen
    [autoit]

    Global $gui = GUICreate('test')
    GUISetState()

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

    $arBar = _SwipBarOn(10, 10, 300, 20)
    $t = TimerInit()
    Do
    If TimerDiff($t) > 8000 Then _SwipBarOff($arBar) ; nach 8 Sekunden wird Bar gelöscht
    Until GUIGetMsg() = -3
    _SwipBarOff($arBar)

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

    #region - SwipBar Funktionen
    Func _SwipBarOn($x, $y, $width, $heigth, $iCol=0x000090, $iBkCol=0xD4D0C8)
    Global $SwipBar[3], $aSwipPos[4], $xSwip, $upSwip = True
    Local $swipWidth = Floor($width/4.5)
    $SwipBar[0] = GUICtrlCreateGroup('', $x-1, $y-7, $width+2, $heigth+8)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $SwipBar[1] = GUICtrlCreateLabel('', $x, $y, $width, $heigth)
    GUICtrlSetBkColor(-1, $iBkCol)
    $SwipBar[2] = GUICtrlCreateLabel('', $x, $y+2, $swipWidth, $heigth-1)
    GUICtrlSetBkColor(-1, $iCol)
    $aSwipPos[0] = $x
    $aSwipPos[1] = $y
    $aSwipPos[2] = $swipWidth
    $aSwipPos[3] = $width
    AdlibRegister('_swip', 30)
    Return $SwipBar
    EndFunc

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

    Func _swip()
    If Not IsDeclared('upSwip') Then Global $upSwip = True
    If Not IsDeclared('xSwip') Then Global $xSwip
    If Not IsDeclared('aSwipPos') Then Global $aSwipPos[4]
    If Not IsDeclared('SwipBar') Then Global $SwipBar[3]
    If $upSwip Then
    $xSwip += 4
    Else
    $xSwip -= 4
    EndIf
    If $upSwip And ($xSwip + $aSwipPos[2] >= $aSwipPos[0] + $aSwipPos[3]) Then $upSwip = False
    If Not $upSwip And ($xSwip <= $aSwipPos[0]) Then $upSwip = True
    ControlMove($gui, '', $SwipBar[2], $xSwip, $aSwipPos[1])
    EndFunc

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

    Func _SwipBarOff($arID)
    AdlibUnRegister('_swip')
    GUICtrlDelete($arID[0])
    GUICtrlDelete($arID[1])
    GUICtrlDelete($arID[2])
    EndFunc
    #endregion - SwipBar Funktionen

    [/autoit]

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™