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

  • Script zusammen fügen

    • misterspeed
    • 27. Mai 2013 um 15:13
    Zitat von Darkhunter566


    Es funktioniert alles bis auf, dass der Button

    [autoit]

    $cmdClickMe

    [/autoit]

    am Ende nicht freigeschaltet wird :o
    Weiß jemand eine Lösung oder das Problem weshalb der nicht freigeschaltet wird ?

    siehe Kommentare im Quellcode...

    [autoit]


    ;----
    If FileExists('reg.ini') Then
    $registerName = IniRead('reg.ini','Auth','Name','')
    $registerKey = IniRead('reg.ini','Auth','Key','')
    $register = _generateKey($registerName,$registerKey) ; <--- hier soll die Variable $register einen wert erhalten, die Funktion _generateKey hat aber garkeinen Return Wert und setzt auch keinen wert für die variable!
    EndIf
    ;....
    _registerDemo()
    ;----
    Func _registerDemo()
    If $register then Return
    GUICtrlSetState($cmdClickMe, $GUI_DISABLE) ; <------------------- hier wird der Button deaktiviert, wenn $register = False (wenn die Variable keinen Wert hat wird dies als 0, also ebenfalls False interpretiert)
    EndFunc
    ;----
    Func _generateKey($str = 0, $masterKey = 0) ; <---------------- ich sehe in dieser Funktion kein return Statement und auch keine Variable namens $register
    If $str = 0 Then $str = GUICtrlRead($txtName)
    If $masterKey = 0 Then $masterKey = GUICtrlRead($txtMasterKey)
    $key = ''
    For $i = 1 To StringLen($str)
    $tmp = Asc(StringMid($str,$i,1))
    $tmp = Number($tmp) * $masterKey
    $key &= String($tmp)
    Next
    GUICtrlSetData($txtSchluessel, MD5Hash($key,2,True) )
    EndFunc

    [/autoit]
  • HTTP Download und HTTP Proxy

    • misterspeed
    • 27. Mai 2013 um 14:31

    Ergänzend sei noch erwähnt, dass man deinen code mangels der von dir genutzten "nicht standard" Includes in dieser Form leider nicht testen kann, aber auch mir fehlt die Zeit und Lust das genauer anzuschaun. Da es sich scheinbar um kommerzielle Software handelt kommt für "euch" vielleicht auch dieses Unterforum in Betracht: https://autoit.de/index.php?page=Board&amp;boardID=35

    Alternativ solltest du vielleicht ein Testscript erstellen, das nur die wesentlichen mit dem Fehler in Verbindung stehenden Bestandteile enthält und "testbar" ist. Dabei findest du dann evtl. den Fehler sogar selbst. ;)

  • Problem mit IniREAD

    • misterspeed
    • 27. Mai 2013 um 14:13
    Zitat von YaeroxXO

    Nebenbei: Du könntest statt $filejava = -1 auch einfach If @error Then nehmen sofern du als 4ten Parameter default lässt. Ob du den default Wert auch ändern kannst, und trotzdem @error nutzen kannst müsstest mal kurz ausprobieren. Jedenfalls wird diese Bedingung ebenfalls nie erfüllt werden...

    Nö. Zumindestens sofern die Hilfe von iniread vollständig ist wird kein @error im Fehlerfall gesetzt. Es gibt außerdem keinen "default" Wert für den 4. Parameter, dieser ist kein optionaler, sondern ein Pflichtparameter. Man entscheidet also selbst was die Funktion im Fehlerfall zurückgibt, hier wie schon erwähnt der String "conf-error".

  • Problem mit IniREAD

    • misterspeed
    • 27. Mai 2013 um 13:57
    Zitat

    .... was soll ich mir da ansehen?

    Die Erklärung des 4. Funktionsparameters und die Erklärung zu den möglichen Return Werten der Funktion wäre schonmal ein Anfang. Diese Prüfung hier wird jedenfalls immer False ergeben, da iniread im Fehlerfall bei dir niemals -1, sondern "conf-error" zurückgeben wird:

    [autoit]


    Local $filejava = IniRead($appver, "Java", "Version","conf-error")
    If $filejava = -1 Then
    GUICtrlSetBkColor($sobjava,0xFFD700)

    [/autoit]


    Das ist aber nicht dein Hauptproblem, das startet prinzipiell hier:

    [autoit]


    Else
    Local $linejava = FileReadLine($filejava)
    If @error = -1 Then ExitLoop

    [/autoit]

    Dies ist unnötig, bzw. falsch. Du hast die Versionsnummer aus der ini doch schon in $filejava stehen (durch iniread ermittelt...). Filereadline würde außerdem keine Versionsnummer als Parameter erwarten, sondern den Dateinamen der (ini) Datei. Ein exitloop ist hier auch völlig fehl am Platz, ich sehe weit und breit keine Schleife, die du damit verlassen könntest.

    Dein anschließender Vergleich nach Entfernung der oben genannten Zeilen müsste also so lauten:

    [autoit]

    If $filejava = $versionjava Then

    [/autoit]

    Zu letzt machst du noch das hier:

    [autoit]

    FileClose($filejava)

    [/autoit]

    Unnötig, denn ich sehe kein fileopen(), außerdem ist $filejava kein Dateihandle (und auch kein Dateipfad, siehe oben), sondern die aus der ini ausgelesene Versionsnummer, also ein simpler String. Das kann man nicht schließen, hier gibts nix zu schließen.

    Da ich mal davon ausgehe, dass du nicht nur prüfen willst ob die Versionsnummer der ini ungleich der installierten Version ist, sondern vermutlich auch wissen willst ob die installierte neuer oder älter ist nutzt dir der ganze Vergleich vermutlich so wie er jetzt ist nicht viel. Daher solltest du dir in der Hilfe noch diese Funktion ansehen:

    [autoit]

    _versioncompare()

    [/autoit]
  • Zeilenweises Löschen in Textdatei: A bis B

    • misterspeed
    • 26. Mai 2013 um 17:25

    Machts jetzt auch nicht komplizierter (siehe unten). Die Datei schreiben und neu einlesen für einen zweiten Schritt ist unnötig, wie in der Schleife angedeutet kannst du deine regexpreplaces auch direkt pro zeile durchführen und anschließend erst die bereinigte Zeile in $aNew[$j] speichern. Nach der Schleife biste dann fertig und kannst die Datei schreiben.

    [autoit]


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

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

    Global $timer = TimerInit()
    Global $aSource
    _filereadtoarray(@ScriptDir & "\filter.ini",$aSource)
    Global $aNew[ubound($aSource)]

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

    $j = 0
    for $i=1 to ubound($aSource)-1
    if stringinstr($aSource[$i],"; Complex Wildcards (Opera Specific)") then exitloop ; vorrausgesetzt dies ist immer der letzte Block der Datei und somit alles nachfolgende uninterressant...
    if stringleft($aSource[$i],1) <> ";" then
    $aNew[$j]=$aSource[$i] ; hier ggf. noch weitere stringreplace oder stringregexpreplace Methoden auf die "erlaubten" Strings anwenden...
    $j+=1
    endif
    next
    redim $aNew[$j]
    ;_ArrayDisplay($aNew)
    _FileWriteFromArray(@ScriptDir & "\filterneu.ini",$aNew)
    ConsoleWrite(TimerDiff($timer) & @CRLF)

    [/autoit]
  • Zeilenweises Löschen in Textdatei: A bis B

    • misterspeed
    • 26. Mai 2013 um 16:33

    Vielleicht magst du ja nochmal detailierter erklären was aus der Datei entfernt bzw. in welcher Form ersetzt werden soll. Anhand der Beispieldatei und deiner Beschreibung willst du lediglich die paar Kommentarzeilen am anfang der ini Datei entfernen. da würde ich nicht lang mit irgendwelchen Index Suchereien rum machen. Angenommen du hast den Kram schon zeilenweise in einem array:

    [autoit]


    $aSource = _filereadtoarray(...)
    dim $aNew[ubound($aSource)]
    $j = 0
    for $i=1 to ubound($aSource)-1
    if stringleft($aSource[$i],1) <> ";" then
    $aNew[$j]=$aSource[$i] ; hier ggf. noch weitere stringreplace oder stringregexpreplace Methoden auf die "erlaubten" Strings anwenden...
    $j+=1
    endif
    next
    redim $aNew[$j]

    [/autoit]

    Ergebnis ist dann eine bereinigte Kopie des ursprünglichen Arrays. Sollte letztlich mindestens genauso, oder gar schneller gehen, da du das Array so oder so mindestens einmal komplett durchgehen musst um deine Ersetzungen durchzuführen.

  • AutoiT - Sortieren

    • misterspeed
    • 26. Mai 2013 um 15:35

    Wenn schon "alcohol", dann richtig :P

    [autoit]


    Func alcohol($bottle) ; the solution
    $aGlass = StringSplit($bottle, @crlf, 3) ; in Gläser schütten
    For $i = 0 To UBound($aGlass)-1
    $aGlass[$i] = StringReplace($aGlass[$i], " ", @crlf & @crlf) ; Das Glas richtig voll machen
    Next
    Return $aGlass ; getting drunk
    EndFunc

    [/autoit]
  • user32.dll AnimateWindow funktioniert nur einmal

    • misterspeed
    • 25. Mai 2013 um 18:34

    Danke, das wars. Bin eigentlich davon ausgegangen, dass das automatisch gesetzt wird (zumal das Fenster ja zu sehen ist), aber so kann man sich täuschen.

    Hier noch der MSDN Link, falls es jemand nutzen will: http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx

    Bei aktiviertem Aero Design macht das ganze aber nur Sinn, wenn man den Popup Fensterstil nutzt, da der Fensterrahmen bei aktiviertem Aero scheinbar nicht mit animiert wird.

  • Edit immer so groß wie GUI

    • misterspeed
    • 25. Mai 2013 um 16:18

    In 3.3.6.1 gibts die jedenfalls nicht, auch nicht in der genannten UDF.

  • Edit immer so groß wie GUI

    • misterspeed
    • 25. Mai 2013 um 15:59

    Irgendwelche Includes vergessen, oder gibts diese Konstante nur in aktuellen Autoit Versionen?

    Code
    `C:\Users\*******\Desktop\AutoIt v3 Script (neu) (2).au3(35,56) : WARNING: $tagTEXTMETRIC: possibly used before declaration.
        Local $tTEXTMETRIC = DllStructCreate($tagTEXTMETRIC)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\********\Desktop\AutoIt v3 Script (neu) (2).au3(35,56) : ERROR: $tagTEXTMETRIC: undeclared global variable.
        Local $tTEXTMETRIC = DllStructCreate($tagTEXTMETRIC)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    Wie dem auch sei, wäre nett, wenn du diese noch nachliefern könntest.

  • FileSaveDialog Problem

    • misterspeed
    • 25. Mai 2013 um 15:34

    Zum einen das, zum anderen wird die Warnmeldung alleine trotzdem nicht dein Problem lösen, denn wenn der Anwender "ja" sagt, dann musst du nachher trotzdem noch verhindern, dass der Text an die existierende Datei angehängt wird, sofern das von deiner Seite unerwünscht ist. Die Warnmeldung selbst hat also keinerlei Auswirkungen auf die mögliche fatale Entscheidung des Anwenders. Sie warnt den Anwender nur, verhindern kann sie nichts. Die Lösung deines eigentlichen Problems, siehe unten...

    [autoit]


    Func SaveSettings()
    $exist = GUICtrlRead($Input5) ; <-- nur zum testen????????????
    $isrvname = GUICtrlRead($Input1)
    $ctext = GUICtrlRead($Edit1)
    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, $isrvname)
    If @error Then Return 0
    If StringRight($save, 4) <> ".cfg" Then $save &= ".cfg"
    $hSave = fileopen($save,2+8) ; öffnet Datei im (Über-)Schreibmodus, wenn sie nicht existiert wird sie mit Verzeichnisstruktur angelegt, andernfalls mit neuem Inhalt überschrieben
    FileWrite($hsave, $ctext)
    fileclose($hsave)
    GUICtrlSetData($Input5, $save)
    EndFunc ;==>SaveSettings

    [/autoit]
  • FileSaveDialog Problem

    • misterspeed
    • 25. Mai 2013 um 13:46

    Kann dein Problem nicht wirklich nachvollziehen. Bei mir kommt die Abfrage immer dann wenn im Zielverzeichnis die Datei vorhanden ist und das 16er Flag verwendet wird. Wie schaut denn deine Variable $isrvname aus?

    Grundsätzlich zeigt der Dialog das Verzeichnis an, welches als "init dir" gewählt wurde (bei dir der Desktop). Sofern man einen "defaultname" angibt, welcher lediglich den Dateinamen beinhaltet ist dies ebenfalls so. Enthält der defaultname hingegen einen kompletten Dateipfad wird dieses Verzeichnis im Dialog angezeigt. Vielleicht liegt ja hier dein Problem? Ich könnte mir vorstellen, dass du UNC Pfade verwendest, also sowas hier "\\servername\pfad". Da ich das hier nicht testen kann, kann ich aber nix dazu sagen ob es dann zu Problemen kommt.

    Wie gesagt, sobald die Datei im Verzeichnis das auch angezeigt wird existiert kommt auch die Meldung bei gesetztem Flag 16.

  • user32.dll AnimateWindow funktioniert nur einmal

    • misterspeed
    • 25. Mai 2013 um 11:22

    Jemand eine Idee, warum nach erfolgreicher Ausführung der Fensteranimation (Button1) keine weiteren Animationen mehr möglich sind? Scheinbar können danach keinerlei Buttons mehr genutzt werden, das eingebaute Timerlabel zeigt aber, dass das Programm ansich noch innerhalb der GUI Schleife ist und somit auch GUI messages auswerten sollte. Lässt man sich alle GUI messages (ungleich 0) in die console ausgeben sieht man auch die messages für Mausklicks, allerdings keine Messages bei Klicks auf Controls. Ich bin ein wenig verwirrt.


    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    GUISetBkColor(0x0066CC)
    $Button1 = GUICtrlCreateButton("Button1", 64, 64, 75, 25)
    $Button2 = GUICtrlCreateButton("Button2", 112, 184, 75, 25)
    $Button3 = GUICtrlCreateButton("Button3", 360, 208, 75, 25)
    $aliveLabel = GUICtrlCreateLabel("",300,50,100,20)
    $Edit1 = GUICtrlCreateEdit("", 88, 288, 473, 121)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $test = TimerInit()
    $i = 0
    While 1
    $nMsg = GUIGetMsg()
    if $nMsg > 0 Then ConsoleWrite("nMsg id: " & $nMsg & @CRLF)
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ConsoleWrite("button1 function called" & @CRLF)
    GUISetState(@SW_HIDE,$Form1)
    $hwnd = WinGetHandle($Form1)
    $result = DllCall("user32.dll", "BOOL", "AnimateWindow", "hwnd", $hwnd, "dword", 5000, "dword", 131072+5) ; activate + diagonal
    If @error <> 0 Then
    ConsoleWrite("ERROR: " & @error & @CRLF)
    GUISetState(@SW_SHOW,$Form1)
    Else
    if IsArray($result) Then
    ;_ArrayDisplay($result)
    Else
    ConsoleWrite("String 1: " & $result & @CRLF)
    EndIf
    EndIf
    Case $Button2
    ConsoleWrite("button2 function called" & @CRLF)
    $temp = GUISetState(@SW_HIDE,$Form1)
    ConsoleWrite("return hide: " & $temp & @CRLF)
    Sleep(3000)
    $temp = GUISetState(@SW_SHOW,$Form1)
    ConsoleWrite("return show: " & $temp & @CRLF)
    EndSwitch
    If TimerDiff($test) > 1000 Then
    $i+=1
    GUICtrlSetData($aliveLabel,$i)
    $test = TimerInit()
    EndIf
    WEnd

    [/autoit]
  • WLan IP Adresse ausgeben

    • misterspeed
    • 24. Mai 2013 um 10:26

    Hier mal eine WMI Abfrage, die dir absolut alle Informationen über die aktuell in Verwendung befindlichen Netzwerkadapter liefern dürfte. Prinzipiell gibt es keinen Unterschied zwischen WLAN Adaptern und "normalen" LAN Adaptern, wie name22 schon sagte. Aber anhand des Gerätenamens dürfte man das durchaus unterscheiden können. Da bei dir vermutlich wie bei mir etliche Felder des Arrays leer sein und dich ohnehin nicht interessieren dürften solltest du das Array bzw. die enthaltenen Abfragen auf das wesentliche Reduzieren.

    Siehe auch: http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

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

    Global $oMyError = ObjEvent("AutoIt.Error", "oMyError") ; Install a custom error handler
    Global $aNet = getNetworkInfo()
    _ArrayDisplay($aNet)

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

    Func getNetworkInfo($strComputer = '.')
    Local $aReturn[1][61] ; = [["überschrift1","...","...",...]] ; --> http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx
    Local $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE')
    Local $x = 0
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][61]
    $aReturn[$x][0] = $objItem.ArpAlwaysSourceRoute
    $aReturn[$x][1] = $objItem.ArpUseEtherSNAP
    $aReturn[$x][2] = $objItem.Caption
    $aReturn[$x][3] = $objItem.DatabasePath
    $aReturn[$x][4] = $objItem.DeadGWDetectEnabled
    $aReturn[$x][5] = parseSubArrayToString($objItem.DefaultIPGateway)
    $aReturn[$x][6] = $objItem.DefaultTOS
    $aReturn[$x][7] = $objItem.DefaultTTL
    $aReturn[$x][8] = $objItem.Description
    $aReturn[$x][9] = $objItem.DHCPEnabled
    $aReturn[$x][10] = $objItem.DHCPLeaseExpires
    $aReturn[$x][11] = $objItem.DHCPLeaseObtained
    $aReturn[$x][12] = $objItem.DHCPServer
    $aReturn[$x][13] = $objItem.DNSDomain
    $aReturn[$x][14] = parseSubArrayToString($objItem.DNSDomainSuffixSearchOrder)
    $aReturn[$x][15] = $objItem.DNSEnabledForWINSResolution
    $aReturn[$x][16] = $objItem.DNSHostName
    $aReturn[$x][17] = parseSubArrayToString($objItem.DNSServerSearchOrder)
    $aReturn[$x][18] = $objItem.DomainDNSRegistrationEnabled
    $aReturn[$x][19] = $objItem.ForwardBufferMemory
    $aReturn[$x][20] = $objItem.FullDNSRegistrationEnabled
    $aReturn[$x][21] = parseSubArrayToString($objItem.GatewayCostMetric)
    $aReturn[$x][22] = $objItem.IGMPLevel
    $aReturn[$x][23] = $objItem.Index
    $aReturn[$x][24] = $objItem.InterfaceIndex
    $aReturn[$x][25] = parseSubArrayToString($objItem.IPAddress)
    $aReturn[$x][26] = $objItem.IPConnectionMetric
    $aReturn[$x][27] = $objItem.IPEnabled
    $aReturn[$x][28] = $objItem.IPFilterSecurityEnabled
    $aReturn[$x][29] = $objItem.IPPortSecurityEnabled
    $aReturn[$x][30] = parseSubArrayToString($objItem.IPSecPermitIPProtocols)
    $aReturn[$x][31] = parseSubArrayToString($objItem.IPSecPermitTCPPorts)
    $aReturn[$x][32] = parseSubArrayToString($objItem.IPSecPermitUDPPorts)
    $aReturn[$x][33] = parseSubArrayToString($objItem.IPSubnet)
    $aReturn[$x][34] = $objItem.IPUseZeroBroadcast
    $aReturn[$x][35] = $objItem.IPXAddress
    $aReturn[$x][36] = $objItem.IPXEnabled
    $aReturn[$x][37] = parseSubArrayToString($objItem.IPXFrameType)
    $aReturn[$x][38] = $objItem.IPXMediaType
    $aReturn[$x][39] = parseSubArrayToString($objItem.IPXNetworkNumber)
    $aReturn[$x][40] = $objItem.IPXVirtualNetNumber
    $aReturn[$x][41] = $objItem.KeepAliveInterval
    $aReturn[$x][42] = $objItem.KeepAliveTime
    $aReturn[$x][43] = $objItem.MACAddress
    $aReturn[$x][44] = $objItem.MTU
    $aReturn[$x][45] = $objItem.NumForwardPackets
    $aReturn[$x][46] = $objItem.PMTUBHDetectEnabled
    $aReturn[$x][47] = $objItem.PMTUDiscoveryEnabled
    $aReturn[$x][48] = $objItem.ServiceName
    $aReturn[$x][49] = $objItem.SettingID
    $aReturn[$x][50] = $objItem.TcpipNetbiosOptions
    $aReturn[$x][51] = $objItem.TcpMaxConnectRetransmissions
    $aReturn[$x][52] = $objItem.TcpMaxDataRetransmissions
    $aReturn[$x][53] = $objItem.TcpNumConnections
    $aReturn[$x][54] = $objItem.TcpUseRFC1122UrgentPointer
    $aReturn[$x][55] = $objItem.TcpWindowSize
    $aReturn[$x][56] = $objItem.WINSEnableLMHostsLookup
    $aReturn[$x][57] = $objItem.WINSHostLookupFile
    $aReturn[$x][58] = $objItem.WINSPrimaryServer
    $aReturn[$x][59] = $objItem.WINSScopeID
    $aReturn[$x][60] = $objItem.WINSSecondaryServer
    Next
    EndIf
    Return $aReturn
    EndFunc

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

    Func parseSubArrayToString($aSub, $del=";")
    Local $sResult = ""
    If IsArray($aSub) Then
    For $i = 0 to UBound($aSub)-1
    $sResult &= $aSub[$i] & ";"
    Next
    $sResult = StringTrimRight($sResult,1)
    Else
    ConsoleWrite("error: no object!" & @CRLF)
    Return "ERROR"
    EndIf
    Return $sResult
    EndFunc

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

    Func oMyError()
    Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.Description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.WinDescription & @CRLF & _
    "err.number is: " & @TAB & Hex($oMyError.Number, 8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.LastDllError & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.Scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.Source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.Helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.HelpContext _
    )
    EndFunc

    [/autoit]
  • WMI Dienststatus abfragen

    • misterspeed
    • 23. Mai 2013 um 15:01

    Kannst das aber btw auch gleich ins Query packen:

    [autoit]

    $colItems = $objWMIService.ExecQuery("Select * From Win32_Service where name='eventlog' AND state='Stopped'")

    [/autoit]
  • WMI Dienststatus abfragen

    • misterspeed
    • 23. Mai 2013 um 14:56

    Du musst nur den Status des Objekts abfragen, siehe lokales Beispiel unten. Je nach Status dann eben entscheiden ob der Service gestartet/gestoppt werden soll oder nicht.

    [autoit]


    $objWMIService = ObjGet('winmgmts:\\.\root\cimv2')
    $colItems = $objWMIService.ExecQuery("Select * From Win32_Service")
    If IsObj($colItems) Then
    For $objItem In $colItems
    ConsoleWrite($objItem.Name & " --> " & $objItem.State & @CRLF)
    ;$objItem.StopService()
    Next
    EndIf

    [/autoit]

    Weiter Infos zu den "Service Objekten", siehe auch hier:
    http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • misterspeed
    • 22. Mai 2013 um 15:07

    Das Problem ist hier nicht der Startindex, bzw die Arraygröße, das ist anfangs korrekt soweit ich das sehe, denn hier kommt das Array von _filereadtoarray und ist 1-based. Die Variable $zeilen entspricht ubound(), hier wird korrekterweise noch 1 subtrahiert im Schleifenkopf, also auch richtig. Das Problem liegt hier aber darin, dass innerhalb der Schleife Elemente des Arrays gelöscht werden. Konkret sieht die Schleife verkürzt so aus:

    [autoit]


    _FileReadToArray($file, $avArray)
    $zeilen = UBound($avArray)
    For $i = 1 To $zeilen - 1
    $avArray[$i] = StringReplace($avArray[$i], "127.0.0.1 ", "")
    ;....
    $string3 = _StringBetween($avArray[$i], $stringleft3, ""); $stringright)
    If Not @error Then
    _ArrayDelete($avArray, $i)
    $i = $i - 1
    EndIf
    Next

    [/autoit]

    Zahlenbeispiel:
    Dein Array enthält anfangs 10 Einträge, also 9 Textzeilen (ubound-1).
    Die Schleife beginnt bei i=1, also die erste der 9 Zeilen.
    Nun gehen wir davon aus, dass dieser Index gelöscht wird, weil die letzte if Bedingung erfüllt ist.
    i wird demzufolge um 1 reduziert, also auf 0 gesetzt.
    Die Schleife startet den nächsten Durchgang, dabei wird i wieder auf 1 gesetzt. Dein Problem ab hier.... das Array ist nun um eine Zeile kleiner (9-1, also 8 Textzeilen), aber deine Variable $zeilen ist immernoch 10-1, sprich 9 Textzeilen.
    Spätestens dann, wenn die Schleife an einem nicht mehr existierendem Index des Arrays ankommt stürzt dein Script ab.
    Du müsstest also auch die Variable für die Abbruchbedingung um 1 reduzieren, wenn du während der Schleife das Array verkleinerst. Alternativ solltest du vielleicht gleich ubound im Schleifenkopf verwenden, da dann die Arraygröße dynamisch ermittelt werden dürfte.

  • Bitcoin Miner mit AutoIt programmieren. Möglich?

    • misterspeed
    • 22. Mai 2013 um 11:38

    Ahja hier gibt es btw eine GUI Lösung in Autoit für zwei gängige (nehm ich jedenfalls an...) cmdline Miner. Hab den Quellcode nur kurz überflogen, wer das ernsthaft nutzen will sollte sich aber selbst intensiv in den Quellcode einarbeiten, um mögliche versteckte "Schweinereien" auszuschließen. Die vorkompilierte Variante würde ich jedenfalls nicht einfach so nutzen: https://bitcointalk.org/?topic=10264.0

  • Combobox auslesen mit Textdatei vergleicheun und einen Wert wiedergeben

    • misterspeed
    • 22. Mai 2013 um 00:39

    Und wo sind nun die Zahlen in deiner Textdatei?

  • Dynamische Namen für Array Variablen

    • misterspeed
    • 21. Mai 2013 um 21:00

    Hier nochmal ein anschaulicheres Beispiel, geht also tatsächlich so wie vermutet:

    [autoit]


    #include <array.au3>
    dim $aTest[3][2] = [["eins",""],["zwei",""],["drei",""]]
    dim $azwei[4] = [1,2,3,4]
    dim $adrei[4] = [5,6,7,8]

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

    $aTest[1][1] = $azwei
    $aTest[2][1] = $adrei

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

    _ArrayDisplay($aTest) ; das gesamte ober array, den inhalt der zweiten spalte sieht man nicht, aber es sind arrays enthalten, beweis siehe unten
    _ArrayDisplay($aTest[1][1])
    _ArrayDisplay($aTest[2][1])

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