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

Beiträge von misterspeed

  • Section in .ini

    • misterspeed
    • 27. Juli 2011 um 13:24
    Zitat von SionS

    Ja sry wenn es funzen würde er schreibt dan nix in die datei da steht dann das drinne was schon voher drinne stand

    Mein script schreibt an den Dateianfgang das was du haben wolltest, nämlich einen Sektionsname [Account]. Ich hatte aber den Code nochmal editiert, weil ich zum testen die ini Deteien im scriptdir hatte. Probiers bitte nochmal.

  • Section in .ini

    • misterspeed
    • 27. Juli 2011 um 13:02

    So zum Beispiel?

    [autoit]


    #include <file.au3>
    #include <array.au3>

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

    Global $aINI
    Global $sOrdner = FileSelectFolder("Ordner wählen", "")
    Global $aFiles = _FileListToArray($sOrdner, "*.ini", 1)

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

    For $i = 1 To $aFiles[0]
    _FileReadToArray($sOrdner & "\" & $aFiles[$i],$aINI)
    _ArrayInsert($aINI,1,"[Account]")
    _FileWriteFromArray($sOrdner & "\" & $aFiles[$i],$aINI,1)
    Next

    [/autoit]
  • Frage/Problem bezüglich FileRead

    • misterspeed
    • 27. Juli 2011 um 12:21

    Ein wirklicher Schutz ist es dennoch nicht.

    Schwachstellen:

    - Autoit Scripte können leicht dekompiliert werden, auch der Obfuskator bringt kaum zusätzlichen Schutz. Dadurch reicht ggf. schon das ändern eines einzigen Zeichens im dekompilierten Quellcode um deine Prüfung unwirksam zu machen.
    - Du integrierst FTP Zugangs Daten ins Script? Dann achte darauf, dass diese wenigstens nur Leserechte besitzen.
    - Internetverbindung und ein Webspace der wirklich immer erreichbar ist wird benötigt. Free Webspace ist da nicht unbedingt das Wahre.
    - Du schreibst, dass nach einmaliger Verifizierung dauerhaft freigeschaltet wird, das bedeutet du speicherst das Prüfergebnis irgendwo (ini Datei / Registry ?) Ebenfalls angreifbar, je nachdem wie du das abgesichert hast.
    - Du veröffentlichst eine komplette Keyliste auf deinem Server, besser wäre ein PHP Script, dass je nach übergebener HWID ein true oder false oder besser einen verschlüsselten code zurückgibt, das würde dann auch bedeuten, dass du keine FTP Daten mehr ins Script einbauen müsstest und eine lokale Dateiprüfung entfällt. Die Datei könnte ja auch manipuliert werden.

    Das wirkliche Hauptproblem wird aber immer die Dekompilierbarkeit bleiben. Dagegen kannst du dich kaum schützen. Den ein oder anderen Weg gibt es um das deutlich zu erschweren, einfach mal ein wenig suchen. Die Frage ist aber auch immer ob sich der ganze Aufwand lohnt. Am besten verhinderst du von Anfang an, dass das Script in falsche Hände gelangt, dann brauchst du dir auch keine Gedanken machen.

  • Problem mit XML Datei lesen

    • misterspeed
    • 26. Juli 2011 um 21:23

    Nächstes mal bitte folgende Dinge beachten:

    - autoit Quellcode Tag verwenden -->
    - sonstigen code der nicht autoit ist (Consolen Fehlermeldungen / xml Auszug) mit dem code Tag posten -->
    - längere code Passagen zusätzlich in Spoiler packen -->
    - Fremd includes wie die "_XMLDomWrapper.au3" entweder verlinken oder als Dateianhang posten

    Nun zu deinem Fehler:

    Zitat von Funktionsbeschreibung _XMLGetNodeCount

    Parameter(s): $path xml tree path from root node (root/child/child..)

    Demnach könnte diese Zeile falsch sein, hab es aber nicht getestet:

    [autoit]


    $iEntryCnt = _XMLGetNodeCount("/feed/entry", "", $NODE_ELEMENT) ; falsch?
    $iEntryCnt = _XMLGetNodeCount("feed/entry", "", $NODE_ELEMENT) ; richtig?

    [/autoit]
  • Unerklärliche Schleife

    • misterspeed
    • 26. Juli 2011 um 20:16

    Ahja nun hab ich den Fehler entdeckt. Es ist fast wie ich vermutet habe. Du lässt dein Script sich selbst aufrufen.

    [autoit]

    @AutoItExe ; Der komplette Pfad und Dateiname der AutoIt-Exe-Datei. Bei kompilierten Skripten der Pfad des laufenden Skriptes.

    [/autoit]

    Bedeutet: shellexecute(deinescript.exe, "mit parameter client.au3")

    Das was du aber eigentlich erreichen wolltest war ja den autoit interpreter mit parameter aufzurufen, nicht dein eigenes laufendes script. ;)
    In kompilierter Form darfst du das Makro so also nicht verwenden.

  • Array variable subscript badly formatted

    • misterspeed
    • 26. Juli 2011 um 19:03

    Ein Fehler dürfte es zum Beispiel immer geben wenn das Listview leer ist, was durchaus durch fehlerhafte regreads entstehen kann, kA wie du das Listview befüllst.
    Was die Größe angeht... sie ist nicht angemessen, da sie entweder zu groß oder im schlimmsten Fall zu klein ist. Besser wäre es dieses _asBody Array genau wie $array anhand der benötigten Zeilen des Listviews zu dimensionieren.

  • Array variable subscript badly formatted

    • misterspeed
    • 26. Juli 2011 um 18:53

    Aso fast vergessen. Badly formated erscheint soweit ich mich erinnere, wenn man Arrays mit ungültigen Angaben deklarieren möchte, also zum Beispiel:

    [autoit]


    Global $aTest1[4][0] ; 0 ist ungültig, mindestgröße ist 1
    $aTest1[1][0]="test"
    MsgBox(0,"",$aTest1[1][0])

    [/autoit]

    Es könnte also sein, dass diese beide Zeilen Fehler anstelle der Anzahl zurückliefern:

    [autoit]


    $iAnzCol = _GUICtrlListView_GetColumnCount($hLvw_Info)
    $iAnzahl = _GUICtrlListView_GetItemCount($hLvw_Info)

    [/autoit]
  • Array variable subscript badly formatted

    • misterspeed
    • 26. Juli 2011 um 18:39

    Auf welche Zeile und auf welches Array bezieht sich die badly formated Meldung denn?

    Was mir auffällt sind folgende Dinge:

    [autoit]


    Func _Listview_2_Array($s_Mode)
    Local $array
    ;...
    Local $msg, $array[$iAnzahl+1][$iAnzCol]

    [/autoit]

    Wieso deklarierst du $array zweimal?

    [autoit]


    If $s_Mode = "Mail" Then
    Dim $as_Body[99] ; 2D Array für Email Versand zu 1D Array konververtieren <--- hier ist vermutlich die Ursache
    For $i = 1 to UBound($array) -1
    $as_Body[$i] = $array[$i][0] & " - " & $array[$i][1]

    [/autoit]

    Kann schonmal böse schief gehen, wie kannst du sicher sein, dass $array nich mehr als 99 Elemente hat? $as_body muss mindestens genauso groß sein wie $array

    [autoit]


    Func _Email_Status_Info($s_ToAddress) ; Emailversand der Log/Statusdatei
    ;...
    Local $as_Body[99]; =
    _Listview_2_Array("Mail")

    [/autoit]

    Auch hier wieder nur 99 groß, davon ab liefert dir die Funktion _listview_2_array doch das Array bereits fertig zurück. Ein deklarieren dürfte da garnicht notwendig sein, wenn dann eher so:

    [autoit]

    Local $as_Body = _Listview_2_Array("Mail")

    [/autoit]


    Natürlich solltest du bevor du damit weiterarbeitest auch prüfen ob du wie erwartet ein Array zurückbekommen hast.

  • Unerklärliche Schleife

    • misterspeed
    • 26. Juli 2011 um 18:15

    Fehler liegt vermutlich in der Client.au3, ich sehe in dem was du bislang gepostet hast jedenfalls nichts was in einer Schleife zum shellexecute führt. Erklären kann ich mir das nur wenn die client.au3 identisch zu deinem ersten codeblock ist, denn dann ruft sich das script immer wieder selbst auf.

  • Die Grundlegensten Funktionen funktionieren nicht!

    • misterspeed
    • 26. Juli 2011 um 17:44

    Anstelle der Tastenkombination solltest du im übrigen besser gleich von Anfang an die Funktionen zur Control Steuerung nutzen:

    [autoit]


    controlclick()
    controlcommand()
    ; und noch einige andere die du in der Hilfe unter Window Management / Controls findest

    [/autoit]

    Send ist nicht sehr zuverlässig. Beim Fenstertitel ist es oft besser sich auf einen Teil Titel zu beschränken, insbesondere dann wenn du vielleicht später neuere Versionen installieren willst müsste das ja sonst wieder angepasst werden. Diesbezüglich solltest ggf. auch noch die Option

    [autoit]

    AutoItSetOption ( "WinTitleMatchMode" [, param] )

    [/autoit]


    ansehen.

  • copy job

    • misterspeed
    • 26. Juli 2011 um 11:16

    Naja du brauchst doch eigentlich garkeine rekursive Dateisuche wenn ich dich recht verstehe. Das was ich bisher gesehen hatte sah danach aus, dass du überhaupt keine Dateien im speziellen kopieren sondern grundsätzlich ganze Ordner kopieren willst. Wenn das so ist verwende doch einfach Dircopy und lass das filelisttoarray gedöns ganz weg. Wenn es doch darauf ankommt die Ordner zu filtern wirst du wohl nicht um filelisttoarray (bzw eine rekursive Variante davon) herumkommen.

  • IRC Chat (Schlüsselwörter) auslesen

    • misterspeed
    • 26. Juli 2011 um 02:00

    Ich benutze selbst eine modifizierte Fassung von Bugfixs IRC client.
    Schau dir mal oben in der While Schleife das hier an:

    [autoit]

    Case 'PRIVMSG' ; Nachricht empfangen

    [/autoit]

    Du musst dort nur etwas Hand anlegen und die Variable $text, welche alles enthält was im Channel geschrieben wird, mit stringinstr Auswerten um Signalwörter (auch als Trigger bekannt) erkennen zu können. Danach reagierst du dann einfach je nach Trigger Befehl mit _IRCsendmessage() um deine Antwort in den Channel zu schicken.

  • exe in gui einbinden und übermalen

    • misterspeed
    • 25. Juli 2011 um 18:16

    In deinem Beispiel ist aber rein garnix zusehen was mit GDI Plus zutun hätte. Es ist ja noch nichteinmal deine GUI oder sonstwas zusehen. Poste einfach dein lauffähiges, komplettes und ungekürztes Script, dann braucht auch niemand mehr raten woran das flackern wohl liegen mag.

  • copy job

    • misterspeed
    • 25. Juli 2011 um 12:56

    1. Solltest du die Zeilen ersetzen und nicht ergänzen. Deine untere For Schleife muss raus, weil $i hier bereits von der äussersten Schleife verwendet wird.
    2. Der Fehler entsteht, weil ein endif zum if statement in Zeile 17 fehlt

    EDIT: Da hatte TheLuBu zeitweillig schon geantwortet...

  • Veränderte Registry Aktuallisieren!

    • misterspeed
    • 24. Juli 2011 um 13:10
    Zitat von BugFix

    Eventuell reicht es ja auch die explorer.exe neu zu starten - schon probiert?


    Mal den Startpost gelesen und das zugehörige Script angesehen? *hust*

  • !! Bildschirm !!

    • misterspeed
    • 23. Juli 2011 um 12:36

    Es gibt ja auch spezielle GUI Styles und resize settings. Ohne sein Script ist es aber sinnfrei da näher darauf einzugehen. Die GUI grundsätzlich im Vollbild zu erstellen ist jedenfalls kaum eine Lösung, die Controls müssen ebenfalls dynamisch anhand der Fenstergröße positioniert und ggf in der Größe angepasst werden. Um sowas aus dem Weg zugehen kann man die GUI auch von anfang an auf eine weitverbreitete und kompatible Auflösung fest setzen. eine maximale Fenstergeröße von 800x600 sollte jedenfalls auf allen heute verbreiteten Monitoren noch darstellbar sein. Alles darüber kann problematisch werden, da sollte man dann über dynamisch anpassende GUI's nachdenken.

  • externe Datei in script einbinden

    • misterspeed
    • 22. Juli 2011 um 17:27

    Versteh das Problem nicht, was ist an iniread denn auszusetzen? Das entspricht doch dem was du willst, du willst Variablen Werte aus einer externen Datei zuweisen oder etwa nicht?

    test.ini Datei:

    Code
    [myvars]
    $var1=test
    $var2=test2
    $var3=test3
    [autoit]


    $inifile=@scriptdir & "\test.ini"
    $var1=iniread($inifile,"myvars","$var1",-1)
    $var2=iniread($inifile,"myvars","$var2",-1)
    $var3=iniread($inifile,"myvars","$var3",-1)
    msgbox(0,"myvars",$var1 & @crlf & $var2 & @crlf & $var3)

    [/autoit]

    Sofern die Variablen Anzahl dynamisch sein soll musst du dich mit Arrays und den anderen ini Funktionen auseinandersetzen.

    [autoit]


    inireadsectionnames()
    inireadsection()

    [/autoit]
  • Adlib UDF nicht parallel

    • misterspeed
    • 22. Juli 2011 um 16:50

    Adlib ist nicht multithreading. Eine Adlib Funktion ist mehr oder weniger ein Funktionsaufruf innerhalb einer laufenden Funktion. Das bedeutet deine aktuelle Funktion wird kurz unterbrochen, die Adlibfunktion eingeschoben und dann gehts wieder mit dem weiter was gerade abgearbeitet wurde. In gewisser weisse läuft aber etwas paralell, nämlich die Zeitmessung um zu bestimmen wann die Adlibfunktion erneut eingeschoben werden soll. Der code selbst wird aber nich paralell ausgeführt. Daran ändern auch multiple adlib Funktionen nichts.

    Um wirklich etwas paralell auszuführen benötigst du eine seperate exe Datei. Diese könnte zum Beispiel per controlcommand() oder vergleichbaren Fenster Funktionen deine Haupt GUI verändern. Ob das Sinn macht und besser funktioniert bezweifle ich aber.

  • Gui Problem

    • misterspeed
    • 22. Juli 2011 um 13:41

    Wirklich sinn macht das für mich zwar nicht, aber hier eine gefixte Version die das macht was du willst. Du kannst nicht einfach msgloop und oneventmode mischen, hatte ich dir aber bereits geschrieben, dass dein Script nicht in einer Funktion festhängen darf wenn du den OnEventMode verwendest. Ausserdem habe ich dir beim Dropdown / Checkbox erstellen mal einen kleinen random Faktor eingebaut damit du siehst dass bei jedem Dropdownklick die Controls neu erstellt werden, was wohl ein Problem sein dürfte...

    Spoiler anzeigen
    [autoit]


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

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

    Global $Form1,$Auswahl,$Start,$Links,$oben

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

    Opt("GUIOnEventMode", 1)

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

    _HauptGui() ; Gui wird gestartet

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

    While 1
    Sleep(10)
    WEnd

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

    ;Funktionen----->

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

    func _HauptGui()
    $Form1 = GUICreate("Form1", 1024, 768, -1,-1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
    $Auswahl = GUICtrlCreateCombo("Auswahl", 472, 44, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Daten")
    GUICtrlSetOnEvent(-1, "_Daten")
    GUISetState(@SW_SHOW)
    $Start = GUICtrlCreateButton("Löschen", 400, 100, 131, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetOnEvent(-1, "_Neu")
    endfunc

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

    Func _Neu()
    GUIDelete($Form1)
    ;MsgBox(0,"","Form gelöscht und neu erzeugt...")
    _HauptGui()

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

    Endfunc

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

    func _Daten()
    ;Opt("GUIOnEventMode", 1)
    GUICtrlSetState($Start,$GUI_ENABLE)

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

    Dim $Links = 50
    Dim $oben = Random(10,50,1)

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

    For $i = 0 To 10
    $checkCN = GUICtrlCreateCheckbox("CHECKBOX 1", $Links, $oben + $i*30, 120, 20)

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

    next
    endfunc
    func _End()
    Opt("GUIOnEventMode", 1)
    exit
    EndFunc

    [/autoit]
  • eigene Pausefunktion

    • misterspeed
    • 22. Juli 2011 um 13:15

    Per Adlibregister kann man das zum Beispiel bewerkstelligen:

    Spoiler anzeigen
    [autoit]


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

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

    Global $paused = False

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

    $Form1 = GUICreate("Form1", 460, 122, 192, 124)
    $Button1 = GUICtrlCreateButton("Start", 32, 64, 75, 25, $WS_GROUP)
    GUICtrlSetState($Button1,$GUI_ENABLE)
    $Button2 = GUICtrlCreateButton("Pause", 120, 64, 75, 25, $WS_GROUP)
    GUICtrlSetState($Button2,$GUI_DISABLE)
    $Progress1 = GUICtrlCreateProgress(32, 32, 390, 17)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; start
    GUICtrlSetState($Button1,$GUI_DISABLE)
    GUICtrlSetState($Button2,$GUI_ENABLE)
    myfunction()
    GUICtrlSetState($Button2,$GUI_DISABLE)
    GUICtrlSetState($Button1,$GUI_ENABLE)
    EndSwitch
    WEnd

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

    Func myfunction()
    AdlibRegister("pausemyfunction",100)
    for $i = 1 to 100
    GUICtrlSetData($Progress1,$i)
    Sleep(50)
    Next
    AdlibUnRegister("pausemyfunction")
    EndFunc

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

    Func pausemyfunction()
    AdlibUnRegister("pausemyfunction")
    if GUIGetMsg() = $Button2 Then $paused = True
    if $paused = True Then
    GUICtrlSetData($Button2,"Fortsetzen")
    Do
    if GUIGetMsg() = $Button2 Then
    $paused = False
    GUICtrlSetData($Button2,"Pause")
    EndIf
    if GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
    Until $paused = False
    EndIf
    AdlibRegister("pausemyfunction",100)
    EndFunc

    [/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™