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

Beiträge von alpines

  • Im geöffneten Firefox eine neue Internetseite laden

    • alpines
    • 30. Oktober 2018 um 12:26
    Zitat von Faultier_1982

    Wie gehe ich da vor oder wo finde ich diesen????

    F12 drücken.

  • TCP-Client: Abfrage nach Verbindungsabbruch zum TCP-Server

    • alpines
    • 30. Oktober 2018 um 10:27
    Zitat von TJF

    Mit TCPConnect-Abfrage bekomme ich das nicht hin. Vermutlich weil hier das Socket abgefragt wird, das Autoit aufbaut und das erst mit TCPShutdown geschlossen wird. Egal was auf der anderen Seite passiert. Eine Abfrage funktioniert nur zuverlässig beim Start und Aufbau der Verbindung.

    Du willst also den Fall simulieren wo der Server abgestürzt ist und der Client Anfragen sendet?

    Wenn deine Verbindung nach dem TCPConnect abgestürzt ist (also die Verbindung etabliert werden konnte) kannst du einfach Heartbeats senden, kleine definierte Pakete auf die der Server antworten muss oder auch nicht.

    Wenn du beim TCPSend ein @error bekommst ist das Senden fehlgeschlagen und die Verbindung ist vermutlich zusammengebrochen.

  • GDI+ Spielerei

    • alpines
    • 29. Oktober 2018 um 17:11

    Ok, ich hab mich mal kurz in dein Skript eingearbeitet und habs implementiert.

    Ich hätte das ganze anders strukturiert aber ich wollte das jetzt nicht komplett über den Haufen werfen, da es einfach zu viel Zeit kosten würde also hab ich das so mal beibehalten.

    Idee:

    Wir haben ein Buffer für das GraphicControl, ein Buffer für die History und einen für die Legs.

    Wir zeichnen die History ins Historybuffer, die Legs ins Legsbuffer und anschließend zeichnen wir erst das Historybuffer und dann das Legsbuffer in das GraphicsControl Buffer.

    Da wir die Bitmap nicht komplett transparent färben können (keine Ahnung ob das möglich ist) überschreiben wir beim nächsten Durchlauf die Legs mit dem Historybuffer, so wirkt es als ob wir

    die alten Legs gelöscht hätten und zeichnen die neuen oben drauf.

    Ist zwar ein bisschen doppelt gemoppelt aber es funkioniert, optimieren kannst du es ja noch selber.

    Immerhin flackerts nicht mehr :)

    AutoIt
    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; ~~~~~~~~~~~~~ GDI+ Spielerei ~~~~~~~~~~~~~~~~~~~~~~~
    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; AutoIt version:    3.0.103
    ; Language:          English
    ; Author:            "o2candoo"
    ; Version:           1.0
    ; ----------------------------------------------------------------------------
    
    
    #Region Includes
    #include <GUIConstantsEx.au3>
    #include <ColorConstantS.au3>
    #include <WindowsConstants.au3>
    #include <Color.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #EndRegion
    
    
    #Region HotKeys
    HotKeySet("{enter}", "_Start")
    #EndRegion
    
    
    #Region Declarations
    ;~ Window
    Global $wWidth = 800
    Global $wHeight = 600
    Global $wMitte_x = $wWidth / 2
    Global $wMitte_y = $wHeight / 2
    Global $mitte_x = @DesktopWidth/2
    Global $mitte_y = @DesktopHeight/2
    ;~ Environment
    Global $pi = 3.141592653589793
    Global $anz = 5 ;~ Choose number between 1 and 15
    ;~ leg attributes
    Global $fix_x = $wMitte_x
    Global $fix_y = $wMitte_y
    Global $l[$anz+1]
    ;~ leg variables
    Global $x[$anz+1], $y[$anz+1], $alpha[$anz+1], $step[$anz+1]
    Global $xmin, $xmax, $ymin, $ymax
    $xmin = $xmax = $ymin = $ymax = 0
    ;~ Initialize leg Variables (Normal)
    For $i = 1 To $anz
       $alpha[$i] = 270
       $l[$i] = Round(Random(5,300/$anz), 0)
       $step[$i] = Round(Random(-20, 20), 0)
       If $i = 1 Then
          $x[$i] = $fix_x + ($l[1] * cos(($pi*$alpha[1])/180))
          $y[$i] = $fix_y + ($l[1] * sin(($pi*$alpha[1])/180))
       Else
          $x[$i] = $x[$i-1] + ($l[$i] * cos(($pi*$alpha[$i])/180))
          $y[$i] = $y[$i-1] + ($l[$i] * sin(($pi*$alpha[$i])/180))
       EndIf
    Next
    ;~ Initialize leg Variables (Hist)
    $xHist = $x[$anz]
    $yHist = $y[$anz]
    ;~ Process variables
    $start = -1
    #EndRegion
    
    
    #Region Gui
    $hGui = GUICreate("Form1", $wWidth, $wHeight, $mitte_x-($wWidth/2), $mitte_y-($wHeight/2),-2147483648)
    GUISetBkColor($COLOR_WHITE)
    Global $label[$anz+1]
    $label_pos = 5
    For $i = 1 To $anz
       $text = String($i) & ":" & @CRLF & _
                "l = " & @TAB & $l[$i] & @CRLF & _
                "step = " & @TAB & $step[$i] & @CRLF
       $label[$i] = GUICtrlCreateLabel($text, 10, $label_pos, 70, 50)
       GUICtrlSetFont($label[$i], 7)
       $label_pos += 40
    Next
    $b_start = GUICtrlCreateButton("START", $wWidth-70, 10, 60, 50)
    GUICtrlSetFont($b_start, 12)
    $b_clear = GUICtrlCreateButton("CLEAR", $wWidth-70, 65, 60, 50)
    GUICtrlSetFont($b_clear, 12)
    $cb_legs = GUICtrlCreateCheckbox("legs", $wWidth-50, $wHeight-80, 50, 30)
    $cb_hist = GUICtrlCreateCheckbox("Hist", $wWidth-50, $wHeight-40, 50, 30)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUISetState(@SW_SHOW)
    #EndRegion
    
    
    #Region ### START GDI+ ###
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    
    $hGraphicBitmap = _GDIPlus_BitmapCreateFromGraphics($wWidth, $wHeight, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hGraphicBitmap)
    
    $hHistoryBitmap = _GDIPlus_BitmapCreateFromScan0($wWidth, $wHeight)
    $hLegBitmap = _GDIPlus_BitmapCreateFromScan0($wWidth, $wHeight)
    
    $hHistoryBuffer = _GDIPlus_ImageGetGraphicsContext($hHistoryBitmap)
    $hLegBuffer = _GDIPlus_ImageGetGraphicsContext($hLegBitmap)
    
    _GDIPlus_GraphicsClear($hHistoryBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hHistoryBuffer, 0xFFFFFFFF)
    
    Global $hPen[$anz+1]
    For $i = 1 To $anz
       $hPen[$i] = _GDIPlus_PenCreate(0xFFFF0000, 1)
    Next
    $hPen_hist = _GDIPlus_PenCreate(0xFF000000, 1)
    $hBrush = _GDIPlus_BrushCreateSolid (0xFFFFFFFF)
    #EndRegion ### END GDI+ ###
    
    
    #Region Loop
    While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             _Exit()
          Case $b_start
             _Start()
          Case $b_clear
             _GDIPlus_GraphicsFillRect($hGraphic, 70, 0, $wWidth-140, $wHeight, $hBrush)
             _GDIPlus_GraphicsFillRect($hHistoryBuffer, 70, 0, $wWidth-140, $wHeight, $hBrush)
             _GDIPlus_GraphicsFillRect($hLegBuffer, 70, 0, $wWidth-140, $wHeight, $hBrush)
       EndSwitch
       If $start = 1 Then
          _Calc()
          _Draw()
       EndIf
    WEnd
    #EndRegion
    
    
    #Region Functions
    Func _Start()
       $start *= -1
       If $start = -1 Then
          GUICtrlSetData($b_start, "START")
       Else
          GUICtrlSetData($b_start, "STOP")
       EndIf
    EndFunc
    
    
    Func _Calc()
       If _IsPressed("1B") Then _Exit()
    ;~    Hist
       $xHist = $x[$anz]
       $yHist = $y[$anz]
    ;~    Normal
       For $i = 1 To $anz
          $alpha[$i] += $step[$i]
          If $i = 1 Then
             $x[$i] = $fix_x + ($l[$i] * cos(($pi*$alpha[$i])/180))
             $y[$i] = $fix_y + ($l[$i] * sin(($pi*$alpha[$i])/180))
          Else
             $x[$i] = $x[$i-1] + ($l[$i] * cos(($pi*$alpha[$i])/180))
             $y[$i] = $y[$i-1] + ($l[$i] * sin(($pi*$alpha[$i])/180))
          EndIf
          If $x[$i] < $xmin Then
             $xmin = $x[$i]
          ElseIf $x[$i] > $xmax Then
             $xmax = $x[$i]
          EndIf
          If $y[$i] < $ymin Then
             $ymin = $y[$i]
          ElseIf $y[$i] > $ymax Then
             $ymax = $y[$i]
          EndIf
       Next
    EndFunc
    
    
    Func _Draw()
        _GDIPlus_GraphicsDrawImageRect($hLegBuffer, $hHistoryBitmap,80, 0, $wWidth-160, $wHeight)
    
    ;~    legs
       If _IsChecked($cb_legs) Then
          If _IsPressed("1B") Then _Exit()
          For $i = 1 To $anz
             If $i = 1 Then
                _GDIPlus_GraphicsDrawLine($hLegBuffer, $fix_x, $fix_y, $x[$i], $y[$i], $hPen[$i])
             Else
                _GDIPlus_GraphicsDrawLine($hLegBuffer, $x[$i-1], $y[$i-1], $x[$i], $y[$i], $hPen[$i])
             EndIf
          Next
       EndIf
    
    ;~       Hist
       If _IsChecked($cb_hist) Then
          _GDIPlus_GraphicsDrawLine($hHistoryBuffer, $xHist, $yHist, $x[$anz], $y[$anz], $hPen_hist)
       EndIf
    
       _GDIPlus_GraphicsDrawImageRect($hBuffer, $hHistoryBitmap,80, 0, $wWidth-160, $wHeight)
       _GDIPlus_GraphicsDrawImageRect($hBuffer, $hLegBitmap,80, 0, $wWidth-160, $wHeight)
       _GDIPlus_GraphicsDrawImageRect($hGraphic, $hGraphicBitmap, 80, 0, $wWidth-160, $wHeight)
    EndFunc
    
    
    Func _IsChecked($idControlID)
        Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
    EndFunc   ;==>_IsChecked
    
    
    Func _Exit()
       For $i = 1 To $anz
          _GDIPlus_PenDispose($hPen[$i])
       Next
    ;~    _GDIPlus_GraphicsDispose($hBuffer)
    ;~    _GDIPlus_BitmapDispose ($hBitmap)
       _GDIPlus_GraphicsDispose($hGraphic)
       _GDIPlus_Shutdown()
       Exit
    EndFunc
    #EndRegion
    Alles anzeigen
  • GDI+ Spielerei

    • alpines
    • 29. Oktober 2018 um 16:51

    Das ist nicht so einfach anzupassen, wenn du den Zeiger drauf haben möchtest.

    Ohne Zeiger musst du einfach nur in das Buffer zeichnen und am Ende die Bitmap auf die Graphics drauf.

    Jetzt hast du das Problem, dass du ja das, was du bisher gezeichnet hast, speichern willst und den Zeiger löschen möchtest.

    Du könntest dazu noch einen Buffer nehmen den du nur für den Zeiger reservierst, diesen clearst du dann jedes Mal beim neu zeichnen.

    So hast du dann auf der hGraphics erst das was du bisher gezeichnet hast und darüber den Zeiger.

    Den Zeigerbuffer clearst du vor jedem Zeichnen, den HistoryBuffer musst du nicht clearen (du zeichnest ja von dort aus immer weiter).

  • GDI+ Spielerei

    • alpines
    • 29. Oktober 2018 um 16:22
    Zitat von o2candoo

    AutoIt version: 3.0.103

    Das ist garantiert nicht deine AutoIt-Version, eher deine SciTE-Version.

    Du solltest mit einem Buffer arbeiten wenn du Legs anhast, ansonsten clearst du ständig das Graphics-Objekt und deswegen flackert das ganze.

    Wenn du in einen Buffer zeichnest und am Ende das Buffer immer auf die Graphics zeichnest (ohne zu clearen) flackert es nicht.

    Dass das Script schneller läuft liegt vermutlich daran, dass Mausevents an das Fenster gesendet werden und der Windows-Scheduler dem Programm mehr Zeit zuweist.

    Du kannst das beheben indem du nicht so schnell wie möglich, sondern zeitlich basiert zeichnest.

  • leeren eines Listenfeldes

    • alpines
    • 27. Oktober 2018 um 14:10

    Schon mal probiert GUICtrlSetData mit leerem Inhalt zu verwenden?

  • Differenz zwischen 2 Datumswerten - ABER - Ergebnis gesucht in: Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden

    • alpines
    • 26. Oktober 2018 um 23:27

    Das ist eigentlich ziemlich einfach, du brauchst dazu nur die Funktion Int().

    Du schaust wie viele Jahre in der Zeit enthalten sind und trennst diese davon ab, mit Int() rundest du die Zahlen ab.

    Hast du 1.2 Jahre, so willst du am Ende 1 Jahr, xxx Monate, ... ausgeben und nicht 2 Jahre oder 1.2 Jahre.

    Du fängst von der größten Zeiteinheit an und rechnest dann immer runter, hier mal in Pseudocode

    zeit = 294209907 sekunden

    jahre = Int(zeit / (1jahr * 12monate * 30tage * 24stunden *60minuten *60sekunden))

    zeit = zeit - jahre * (1jahr * 12monate * 30tage *24stunden *60minuten *60sekunden)

    monate = Int(zeit / (1monat * 30tage *24stunden *60minuten *60sekunden))

    zeit = zeit - monate * (1monat * 30tage *24stunden *60minuten *60sekunden))

    tage = Int(zeit / (1tag *24stunden *60minuten *60sekunden)

    zeit = zeit - tage * (1tag *24stunden *60minuten *60sekunden)

    stunden = Int(zeit / (1stunde *60minuten *60sekunden)

    zeit = zeit - tage * (1stunde *60minuten *60sekunden)

    minuten = Int(zeit / (1minute * 60sekunden)

    zeit = zeit - tage * (1minute * 60sekunden)

    sekunden = zeit <-- vorausgesetzt du hast Sekunden und nicht Millisekunden

  • Internet sperren für Prüfungssituationen

    • alpines
    • 26. Oktober 2018 um 14:51
    Zitat von Moombas

    HeiWoMa: Auch eine Möglichkeit aber was wenn du (und man sollte alle Eventualitäten bedenken) sehr schlaue Schüler hast, die das raus bekommen und die host vorher sichern und in der Prüfung überschreiben? Schon ist diese "Sicherung" pfutsch.

    Ohne Adminrechte kannst du die hosts nur, wenn überhaupt, lesen. Haben die Benutzerkonten der Schüler keine Adminrechte müssten sie schon eine Lücke im Windows Betriebssystem finden wenn das Adminkontopasswort grad nicht 12345 lautet.

  • Internet sperren für Prüfungssituationen

    • alpines
    • 26. Oktober 2018 um 14:31

    Je nachdem wie viel Kontrolle man noch über das System hat könnte man auch einfach alle Anfragen gegen localhost laufen lassen.

    Proxifier kann das z.B., aber man kann es dann natürlich in der GUI dementsprechend deaktivieren.

    Mal ein ganz einfacher Vorschlag, warum haben die Schüler nicht 5 Minuten Office zu starten und sich den Rechner einzurichten und dann wird der Stecker gezogen (also vom Switch)?

    Kurz noch einmal rumgehen und schauen ob irgendwo andere Dokumente offen sind und die Prüfung kann doch losgehen?

  • Excel Datei auslesen und Daten kopieren.

    • alpines
    • 24. Oktober 2018 um 17:00
    Zitat von lsc

    Also UBound bedeutet schon mal (wenn ich das richtig verstanden habe) das er das Array weiter führt bis der letzte wert erreicht ist richtig ?

    UBound gibt dir die Größe des Arrays in der entsprechenden Dimension zurück, die du angibst.

    Wenn du den Fehler bekommst heißt das, dass dein Array kein 2D Array ist bzw. die 2. Dimension kleiner als 1 ist.

    Lass dir mal mit UBound($aResult, 2) in einer MsgBox oder in der Konsole die Größe davon ausgeben oder prüfe es in _ArrayDisplay händisch nach.

  • Datum umwandeln

    • alpines
    • 24. Oktober 2018 um 13:47

    Ob die Date.au3 die Umwandlung unterstützt kann ich dir nicht sagen aber du kannst dich da ja mal umsehen.

    Ansonsten scheint das keine komplizierte Umwandlung zu sein. Das Datum parst du mit RegEx raus und ersetzt den Monat durch die Zahl und formatierst das Datum.

    Für die Uhrzeit musst du nur schauen ob da PM oder AM steht und jeweils +12 draufaddieren (aber Achtung, 12 PM = 12 Uhr Mittag, 12 AM = Mitternacht, 1 PM = 13 Uhr).

  • Local, Const oder Static?

    • alpines
    • 22. Oktober 2018 um 23:58

    Das kommt darauf an was du für einen Wert zuweist, ob er ein Funktionsparameter ist oder eine globale Variable oder bereits eine Konstante.

    Nichtsdestotrotz ist der Geschwindigkeitsunterschied vollständig zu vernachlässigen da es hier um die Zuweisung einer einzigen Variable geht.

  • [GDI+] Bild aus anderem Bild zusammensetzen

    • alpines
    • 21. Oktober 2018 um 10:30
    Zitat von Andy

    Hab jetzt auch mal nachgeschaut, der CHIP-Installer ist brauchbar, wenn man die 2-3 nicht benötigten Programme NICHT installiert^^

    Fast immer gibt es rechts von dem Button einen kleinen dickgedruckten Text "Manuelle Installation" mit dem man ohne den Installer auskommt.

    Generell nutze ich chip überhaupt nicht mehr, weil mich dieses Installerzeugs einfach nur ankotzt (Adblock Werbung noch dazu) und man direkt beim Hersteller laden kann.

    Aber das soll ja nicht Thema hier sein.

  • Local, Const oder Static?

    • alpines
    • 19. Oktober 2018 um 17:19
    Zitat von diepfeile

    Ja, der Performancegewinn ist < ms, aber warum sollte ich ihn nicht mitnehmen, zudem summiert sich das ja auf? Dank Local sollte es ja nicht zu Kollisionen kommen können. Oder gehört das einfach zu good coding practices?
    Not = ist auch aus irgendeinem Grund doppelt so schnell wie <>

    Local Static war bei meinem Test 0.2% schneller, das istn Witz verglichen damit, was eine Funktion überhaupt rechnet.

    Es geht hier nur um die Zuweisung! Du bist wesentlich besser bedient wenn du einfach deinen Code optimierst und semantisch lesbarer machst.

    Du passt den Wert innerhalb der Funktion nicht an wenn du ihn einmal definiert hast, also solltest du Const nehmen und nicht Static.

    Static brauchst du wenn du explizit keine globale Variable definieren möchtest und eine lokal persistente Variable haben willst, eine die ihren Inhalt nach dem Funktionsdurchlauf behält.

    Das tust du aber nicht, ich sehe nirgends, dass du die Static Variable nochmal beschreibst, selbst wenn du den Inhalt von $iShortSleep anpasst wird deine Funktion ihren ursprünglichen Wert behalten (so funktionieren Static Vars).

  • Local, Const oder Static?

    • alpines
    • 19. Oktober 2018 um 14:54
    Zitat von autoBert

    Da sich mir der Gedanke aufgrängt, daß die Variablen (*_Loop) innerhalb einer/mehrer Funktion(en) als Endbedingung eines Loop's benutzt werden sollen, kann ich keinen Nutzen einer Local Static Deklaration erkennen.

    Ja, das habe ich auch nicht gesagt. Static sollte schneller sein, da nicht jedes Mal der Wert der Variable zugewiesen wird und somit vermutlich schneller ist.

    Aber dieser Geschwindigkeitsschub ist komplett vernachlässigbar.

  • _Excel_RangeSort - Sortierproblem

    • alpines
    • 18. Oktober 2018 um 19:33

    Ich weiß nicht ob _Excel_RangeSort 2D Arrays sortieren kann aber kannst du die Daten nicht in ein Array lesen und mit _ArraySort sortieren und dann wieder in das Dokument schreiben?

  • _FileListToArray unter Windows 10 1803

    • alpines
    • 18. Oktober 2018 um 16:31

    Nun, es gibt bestimmt eine Möglichkeit die nicht mal ins Array zu lassen aber, da sie immer als Index 1 und 2 auftauchen kannst (einfach prüfen ob 1 = "." und 2 = ".." du sie einfach ArrayDeleten.

    Dann aber nicht vergessen die Anzahl in Index 0 zu reduzieren (oder gleich mitlöschen, schließlich gibt es ja UBound).

  • _FileListToArray unter Windows 10 1803

    • alpines
    • 18. Oktober 2018 um 16:23

    Das sind "Standardordner" die Betriebssysteme immer anzeigen. "." ist dabei das aktuelle Verzeichnis und ".." das Verzeichnis darüber.

  • Local, Const oder Static?

    • alpines
    • 18. Oktober 2018 um 16:22

    Der Performancegewinn ist so gut wie zu vernachlässigen da du bestimmt nicht das letzte bisschen an Geschwindigkeit rauskitzeln willst.

    Du veränderst den Inhalt der Variablen nicht also kannst du Const verwenden, allerdings wirst du bei Local Const kein Static setzen können, macht ja auch sinn.

    Ich würde hier die Variante nehmen die sich schöner liest. Wenn der Wert sich nicht verändert: Local Const $I_SHORT_LOOP = 3000 / $iShortSleep.

    Du kannst es auch als Local Static deklarieren, und es wäre wohl "schneller", aber der Geschwindigkeitsschub ist infinitesimal klein.

  • Variable / String auslesen und vergleichen klappt nicht

    • alpines
    • 18. Oktober 2018 um 11:22
    Zitat von mirko2002

    If Not StringRight($read_status, 6) = "Fertig" Then

    Das Not bindet stärker als der Gleichheits operator. Du negierst also erst einen String und dann prüfst du ob er = "Fertig" ist.

    Wieso verwendest du nicht direkt den Ungleichoperator <> statt Not? Ansonsten musst du StringRight = Fertig in Klammern setzen wenn du Not nutzen willst.

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™