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

Beiträge von name22

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 5. Juni 2012 um 18:11

    Ich halte es für unwahrscheinlich, dass es mit InetGet geht. Mit WinHTTP eventuell. Und mit TCP bestimmt. Aber ich weiß leider nicht, ob da irdgenwo die Daten in einem Buffer gespeichert werden. Wenn das der Fall ist, dann könnte ich dir nur sagen, wie man die Geschwindigkeit mit der die Daten aus diesem Zwischenspeicher in eine Datei kopiert werden reguliert. Die Downloadgeschwindigkeit würde dann gleich bleiben.
    Ich hab mal ein Beispiel für WinHTTP geschrieben. Das scheint zu funktionieren.

    Spoiler anzeigen
    [autoit]

    #include <WinHTTP.au3>
    #include <Array.au3>

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

    ; -Author: name22(http://www.autoit.de)

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

    $nSpeedLimit = 300 ;Bytes per Second
    $iBytesPerStep = 8192 ;Number of Bytes read every iteration - does not affect speed
    $iSleepTime = Round($iBytesPerStep / $nSpeedLimit)

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

    $sURL_Download = 'http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-27_05_11.zip'
    $sPathDst = @DesktopDir

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

    $vNTdll = DllOpen("ntdll.dll")

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

    $tPrecSleep = DllStructCreate("int64 time;")
    $pPrecSleep = DllStructGetPtr($tPrecSleep)

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

    $aURL_Split = _WinHttpCrackUrl($sURL_Download)

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

    $hOpen = _WinHttpOpen()
    $hConnect = _WinHttpConnect($hOpen, $aURL_Split[2])
    $hRequest = _WinHttpOpenRequest($hConnect, "GET", $aURL_Split[6])

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

    _WinHttpSendRequest($hRequest)
    _WinHttpReceiveResponse($hRequest)

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

    $iSizeBytes = _WinHttpQueryHeaders($hRequest, $WINHTTP_QUERY_CONTENT_LENGTH)

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

    $nT2 = TimerInit()
    Switch _WinHttpQueryDataAvailable($hRequest)
    Case True
    $vData = Binary("")
    $nT = TimerInit()
    Do
    DllStructSetData($tPrecSleep, "time", -10000 * ($iSleepTime - TimerDiff($nT)))
    DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep)
    $nT = TimerInit()
    $vData &= _WinHttpReadData($hRequest, 2, $iBytesPerStep)
    Until @error

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)

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

    $hFile = FileOpen($sPathDst & "\" & StringTrimLeft($aURL_Split[6], StringInStr($aURL_Split[6], "/", 0, -1)), 18)
    FileWrite($hFile, $vData)
    FileClose($hFile)

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

    MsgBox(64, "Info", "Download completed." & @CRLF & "Time: " & Int(TimerDiff($nT2)) & @CRLF & "Speed: " & $iSizeBytes / Int(TimerDiff($nT2)))
    Case False
    MsgBox(16, "Error", "No Data available.")
    EndSwitch

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

    DllClose($vNTdll)

    [/autoit]
  • sqlite3.dll verschwunden

    • name22
    • 4. Juni 2012 um 22:53

    Ich kann dir nur sagen, dass sie aus meiner Sicht nicht bei Win7, AutoIt oder SciTe dabei ist... Ich hab die noch nie gesehen, obwohl ich diese 3 Dinge seit Ewigkeiten benutze.
    Auf jeden Fall wird sie wohl kaum bei der Standard Win7 Installation dabei sein.

  • sqlite3.dll verschwunden

    • name22
    • 4. Juni 2012 um 22:13

    Die DLL stammt (man glaubt es kaum) von SQLite (sqlite.org, hier kannst du sogar exakt diese DLL runterladen ;)). Google hilft. :D

  • "Go" Button mit Liste verknüpfen

    • name22
    • 4. Juni 2012 um 21:58

    Und ich hab unabhängig davon den exakt selben Code geschrieben... 1:1...

  • Fensterposition in INI speichern und neue GUI an dieser Position erstellen

    • name22
    • 4. Juni 2012 um 20:23

    Dann machst du was falsch. Wenn wir dir sagen sollen was das ist, dann zeig den Funktionsaufruf her.

  • Ordner unsichtbar machen (Nur mit entsprechenden Explorereinstellungen sichtbar)

    • name22
    • 4. Juni 2012 um 15:46

    Also bei mir klappt das Verstecken von Verzeichnissen mit FileSetAttrib prima...

  • GDI+ und Controls

    • name22
    • 3. Juni 2012 um 13:51

    UEZ hat dazu mal was gepostet. Ist auch in seinem Downloader Beispiel drin. Von wem die Idee ursprünglich stammt weiß ich aber nicht.
    Ich hab dazu mal diese Beispiel geschrieben.

  • Tab-Items sperren und bei Bedarf enablen

    • name22
    • 3. Juni 2012 um 13:46

    Das geht auch. Aber BugFixs Lösung ist definitiv besser. Deine Version hängt von dem Intervall ab in dem du das ganze Abfragst. Bei BugFix gibt es sozusagen kein Intervall, da er mit Hooks arbeitet. Sein Script ist effizienter und sauberer. Ich würde das verwenden wenn ich du wäre ;).

  • Ordnernamen mit _FileListToArray in ListBox

    • name22
    • 2. Juni 2012 um 20:50
    Zitat

    EDIT: Und vorallem, wieso findet AutoIT das nichts?


    Kann ich dir nicht sagen, aber an der Funktion liegt es definitiv nicht. Überprüf mal den Pfad.

    Zitat

    mit call wollte ich einfach die nächste Funktion aufrufen... geht das besser ? ?(


    Funktionen ruft man so auf:

    [autoit]

    _TestFunction("Parameter 1", 5023) ;Funktionsaufruf

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

    Func _TestFunction($Param1, $Param2)
    ;Do stuff here
    EndFunc

    [/autoit]


    Wenn du das nicht kennst, solltest du dir definitiv mal die Tutorials anschauen die unter "Wichtige Links" links neben den Beiträgen zu finden sind... Das sind Grundlagen die du draufhaben solltest bevor du mit irgendwas komplizierterem anfängst.

  • Ordnernamen mit _FileListToArray in ListBox

    • name22
    • 2. Juni 2012 um 20:42

    Wozu Call? ?(
    Und die Fehlermeldung heißt, dass du ein Element eines Arrays auslesen wolltest das nicht existiert. _FileListToArray findet also keine Dateien/Ordner.

  • Ordnernamen mit _FileListToArray in ListBox

    • name22
    • 2. Juni 2012 um 20:34

    _FileListToArray gibt, wie der Name schon sagt, ein Array zurück. GUICtrlSetData akzeptiert aber aus offensichtlichen Gründen keine Arrays. Wenn du zum Beispiel ein ListView Control o.Ä. hast, dann musst du das entweder mit der Funktion

    [autoit]

    _GUICtrlListView_AddArray

    [/autoit]

    oder einer anderen Funktion (je nachdem was für ein Control du verwendest) die Arrays akzeptiert machen.
    Sonst befüllst du die Liste einfach Element für Element.

  • Tab-Items sperren und bei Bedarf enablen

    • name22
    • 2. Juni 2012 um 18:54

    Du kannst soweit ich weiß nur das ganze Tab Control disablen. Nicht einzelne Tabs. Zumindest habe ich noch keine Möglichkeit gesehen.
    Du kannst aber alternativ auch die OwnTab UDF (ich glaube so hieß die) von funkey verwenden, oder einfach verhindern, dass der User die Tabs umschaltet indem du im Script immer automatisch zum vorherigen Tab zurückschaltest.

  • Frage zur GUI

    • name22
    • 2. Juni 2012 um 18:40

    Hatte grade Lust ein Beispiel zu schreiben...
    Wie wärs denn so?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Dim $aInput[1] = [0]

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

    $hWnd = GUICreate("Main", 400, 200)
    $cInput_Main = GUICtrlCreateInput("", 5, 5, 60, 20)
    $cButton_OK = GUICtrlCreateButton("OK", 75, 5, 40, 20)
    GUISetState()

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

    $hWnd_Input = GUICreate("Input", 400, 205)

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

    While True
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[1]
    Case $hWnd
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cButton_OK
    $iCount = GUICtrlRead($cInput_Main)
    If StringIsInt($iCount) And $iCount > 0 Then
    $aInput[0] = $iCount
    ReDim $aInput[$aInput[0] + 1]
    GUISwitch($hWnd_Input)
    For $i = 1 To $aInput[0]
    $aInput[$i] = GUICtrlCreateInput("", 5 + Floor(($i - 1) / Floor(200 / 25)) * 65, 5 + Mod(($i - 1), Floor(200 / 25)) * 25, 60, 20)
    Next
    GUISetState()
    EndIf
    EndSwitch
    Case $hWnd_Input
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $hWnd_Input)
    For $i = 1 To $aInput[0]
    GUICtrlDelete($aInput[$i])
    Next
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Frage zur GUI

    • name22
    • 2. Juni 2012 um 17:05

    Meinst du nicht es wäre effektiver einfach die Anzahl der Inputs in einer GUI zu verändern?

  • Frage zur GUI

    • name22
    • 2. Juni 2012 um 16:25
    Zitat

    Wie mache ich das denn, das bei jeder Zahl die ich im input eingebe eine andere GUI aufgeht? bei 1 eine mit 1 input, bei 2 eine mit 2 inputfeldern usw ...


    Das klingt nach keinem besonders effektiven Plan... Was genau soll daraus denn werden? Das kriegt man mit Sicherheit einfacher und sauberer gelöst.

  • endlos funktion

    • name22
    • 2. Juni 2012 um 16:24

    Ich hab mal ne fertige Funktion aus $vars Vorschlag geschrieben, auch wenn ich das Vorhaben für wenig sinnvoll halte...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $iArrayCount = Random(1, 5, 1)
    $iArraySize = 8
    MsgBox(64, "Info", "Nr. of Arrays: " & $iArrayCount)
    Dim $aArrays[$iArrayCount]
    For $i = 0 To $iArrayCount - 1
    Dim $aTemp[$iArraySize]
    For $j = 0 To $iArraySize - 1
    $aTemp[$j] = Random(0, 100, 1)
    Next
    _ArrayDisplay($aTemp, "Array Nr. " & $i + 1)
    $aArrays[$i] = $aTemp
    Next
    $aTemp = ""

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

    $aNewArray = _ConcatenateArrays($aArrays)
    _ArrayDisplay($aNewArray, "New 2D Array")

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

    Func _ConcatenateArrays(ByRef $av_Arrays)
    ; -Author: name22 (http://www.autoit.de)
    Local $iCount = UBound($av_Arrays)
    Local $aTempArray = $aArrays[0]
    Local $aReturn[$iCount][UBound($aTempArray)]
    For $i = 0 To $iCount -1
    $aTempArray = $av_Arrays[$i]
    For $j = 0 To UBound($aTempArray) -1
    $aReturn[$i][$j] = $aTempArray[$j]
    Next
    Next
    Return $aReturn
    EndFunc

    [/autoit]


    Die Arrays müssen aber hier selbstverständlich die selbe Anzahl an Elementen haben, da du sie in ein 2D Array packen willst.
    Was spricht denn dagegen das manuell zu machen? Wenn du uns nichts über dein Vorhaben erzählst, dann brauchst du dich auch nicht wundern wenn wir hier nicht vorankommen.

  • Text aus Programm auslesen, ohne visible Text

    • name22
    • 2. Juni 2012 um 14:07

    Ich bezweifle stark, dass das hier Forenregelngemäß ist... Zumindest den Fenstertitel nach zu urteilen.

  • PixelPixelChecksum und Timer

    • name22
    • 2. Juni 2012 um 01:10
    Zitat

    könntest mir nen Bsp. zu _Timer_setTimer machen?


    Ich versuchs mal. Ich bin mir leider immer noch nicht sicher wie das nachher aussehen soll.
    Verwendest du eigentlich eine GUI?

    Spoiler anzeigen
    [autoit]

    #include <Timers.au3>

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

    Dim $checksum_koords[4]
    $checksum_koords[0] = 1002
    $checksum_koords[1] = 1070
    $checksum_koords[2] = 571
    $checksum_koords[3] = 581

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

    $hWnd = WinGetHandle(AutoItWinGetTitle())
    $iTimer = _Timer_SetTimer($hWnd, 1000, "_CheckPixels") ;Hier wird die zeit in Millisekunden angegeben, die zwischen den Aufrufen von _CheckPixels gewartet wird

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

    OnAutoItExitRegister("_Shutdown") ;Shutdown beim beenden des Scripts ausführen.

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

    While True
    Sleep(500) ;Do Stuff here...
    WEnd

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

    Func _CheckPixels($hWnd, $Msg, $iIDTimer, $dwTime)
    $checksum = PixelChecksum($window[0] + $checksum_koords[0], $window[1] + $checksum_koords[2], $window[0] + $checksum_koords[1], $window[1] + $checksum_koords[3])
    If $checksum = PixelChecksum($window[0] + $checksum_koords[0], $window[1] + $checksum_koords[2], $window[0] + $checksum_koords[1], $window[1] + $checksum_koords[3]) Then
    MsgBox(0, "", "")
    EndIf
    EndFunc ;==>_CheckPixels

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

    Func _Shutdown()
    _Timer_KillAllTimers($hWnd) ;Muss beim beenden ausgeführt werden, Wichtig!
    EndFunc

    [/autoit]
  • PixelPixelChecksum und Timer

    • name22
    • 2. Juni 2012 um 00:41
    Zitat

    wenn ich aber eine stoppuhr habe macht er etwas in der zeit


    Ist das etwas das in 1 Sekunden Intervallen regelmäßig unterbrochen werden kann? Wenn ja, dann würde ich entweder AdlibRegister oder _Timer_SetTimer verwenden.

  • PixelPixelChecksum und Timer

    • name22
    • 2. Juni 2012 um 00:32

    Aber wieso macht es einen Unterschied, ob du bei Schritt 2 Timer verwendest oder Sleep?

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™