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

Beiträge von Oscar

  • Datumsproblematik

    • Oscar
    • 14. Januar 2019 um 13:51

    Upps! Jetzt habe ich die Funktionen durcheinander gebracht.

    Ja, klar! Also im Script _DateToDayOfWeekISO durch _DateToDayOfWeek ersetzen.

  • Datumsproblematik

    • Oscar
    • 14. Januar 2019 um 13:06

    Da ist noch ein kleiner Fehler in meinem Script.

    Du musst _DateDayOfWeekISO durch _DateDayOfWeek ersetzen, weil _DateDayOfWeek mit 1=Sunday rechnet.

    Du musst _DateToDayOfWeekISO durch _DateToDayOfWeek ersetzen.

  • Datumsproblematik

    • Oscar
    • 14. Januar 2019 um 11:45
    Zitat von Sonderbaar

    Ich hätte gerne dass das jeweilige Datumfeld bei einer Größe < 10 also 1-9 eine führende 0 voran setzt... in den anderen Tagen dann logischweise nicht (10,11,12)

    Das kannst Du mit StringFormat erreichen.

    Aber warum nutzt Du nicht gleich komplett die Date-UDF:

    Code
    #include <Date.au3>
    #include <array.au3>
    
    Global $sStartDate = '2019/01/01'
    Global $sTmpDate, $sLocalDate, $iWN, $iWD, $sWD
    
    For $i = 0 To 11
        For $j = 0 To _DateDaysInMonth(StringLeft($sStartDate, 4), StringMid($sStartDate, 6, 2)) - 1
            $sTmpDate = _DateAdd('D', $j, $sStartDate)
            $iWN = _WeekNumberISO(StringLeft($sTmpDate, 4), StringMid($sTmpDate, 6, 2), StringMid($sTmpDate, 9, 2))
            $iWD = _DateToDayOfWeekISO(StringLeft($sTmpDate, 4), StringMid($sTmpDate, 6, 2), StringMid($sTmpDate, 9, 2))
            $sWD = _DateDayOfWeek($iWD, $DMW_LOCALE_SHORTNAME)
            $sLocalDate = _DateTimeFormat($sTmpDate, 2)
            ConsoleWrite(StringFormat('Woche: %02i   %s, %s (%s)\r\n', $iWN, $sWD, $sLocalDate, $sTmpDate))
        Next
        $sStartDate = _DateAdd('M', 1, $sStartDate)
    Next
    Alles anzeigen
  • Ein NewsDisplay mit AutoIt und Arduino

    • Oscar
    • 13. Januar 2019 um 12:32

    Ich dachte mir, ich kombiniere mal wieder zwei meiner Hobbys (AutoIt und Arduino).

    Eine kleine Arduino-Schaltung stellt ein LC-Display bereit, auf dem Meldungen angezeigt werden, die von einem AutoIt-Script verschickt werden.

    Was brauchen wir an Hardware:

    1. Ein Steckbrett

    2. Ein Arduino Nano (oder China-Clone) reicht völlig aus

    3. Ein 4x20 Zeichen LCD mit I2C-Interface (z.B. das hier: https://www.amazon.de/AZDelivery-HD4…62DR4AE9ZQ93QK9)

    4. Einen von diesen kleinen PushButtons (Taster), die man gut auf das Steckbrett stecken kann.

    5. Einen Piezo-Summer (siehe Fritzing-Bild oder auch diese kleinen steckbaren Piezos). Keinen Lautsprecher! Der Piezosummer muss schon beim anlegen der Spannung einen Piepton ausgeben.

    6. Ein paar dieser Steckbrett-Strippen.

    Kosten:

    Alles zusammen geschätzte 20 - 25 € (je nachdem wo man einkauft oder ob man bereits etwas davon hat).

    Ich habe mal mit Fritzing einen "Schaltplan" erstellt:

    NewsDisplay_Steckplatine.png

    Das Display dort ist ein 2x16 Zeichen-Display. Wird aber ebenso über I2C angesteuert. Ist also von der Verkabelung völlig identisch. Das muss man nur in der Software anpassen.

    Das obige 4x20 Zeichen-Display benutze ich und das braucht (bei eingeschalteter Hintergrundbeleuchtung) ca. 32mA. Somit kann man die ganze Schaltung noch vom Nano versorgen (über das USB-Kabel).

    An der I2C-Zusatzplatine befindet sich ein kleines Poti, mit dem man den Display-Kontrast einstellen kann. Falls auf eurem Display also nichts zu sehen ist, mit einem kleinen Schraubendreher das Poti etwas verstellen.

    Der PiezoSummer piept bei einer neuen Nachricht (das Display wird hell und zeigt die Nachricht) und der PushButton (Taster) ist zum bestätigen der eingetroffenen Nachricht (schaltet dann das Display wieder dunkel).

    Software:

    Im ZIP-Archiv "NewsDisplay_Arduino.zip" befindet sich das Programm für den Arduino (inkl, meiner PushButton-Klasse zum entprellen).

    Im ZIP-Archiv "NewsDisplay_AutoIt.zip" befindet sich das AutoIt-Programm (inkl. meiner SerialComm-UDF).

    Beim AutoIt-Script müsst ihr noch den COM-Port anpassen (je nachdem, welchen Port euer Nano belegt).

    Die Baudrate muss in beiden Programmen gleich sein. Bei mir hat es mit hohen Baudraten (>19200) nicht funktioniert. Mit 19200 läuft es aber stabil. Zur Not könnt ihr auch auf 9600 runtergehen.

    Mit 19200 Baud dauert die Übertragung von 4 Zeilen je 20 Zeichen ca. 57 ms.

    Das AutoIt-Script ist wohl weitgehend selbsterklärend. Das Arduinoprogramm habe ich ausführlich kommentiert.

    Ihr könnt die Programme nach euren Vorstellungen anpassen oder als Vorlage für Größeres nehmen.

    Ich bin mal gespannt, auf was für Ideen ihr kommt, wofür man das Display verwenden kann. :)

    Edit 14.01.2019:

    - Das Arduino-Programm ist jetzt ohne "delay" beim Piepton.

    - Man kann jetzt einstellen, wie viele Pieptoene ausgegeben werden sollen.

    - Außerdem kann man die Piepton- und die Pieptonpausenzeit einstellen.

    - Die interne LED (an Pin 13) blinkt jetzt zusammen mit den Pieptönen.

    - Und der Arduino sendet ein "ok" zurueck, wenn die Nachricht angekommen ist.

    - Auf der AutoIt-Seite habe ich noch ein AutoIt-GUI-Script als Beispiel geschrieben. Das empfängt dann auch das "ok" und zeigt es in der Statuszeile an.

    - Dort kann man auch den Arduino-COM-Port aus einer Liste der vorhandenen COM-Ports auswählen (Combo-Select).

    Edit 16.01.2019:

    - Das neue Arduino-Programm ("NewsDisplayMulti_Arduino_v1_1.zip") kann jetzt bis zu 15 Nachrichten speichern. Mit dem Pushbutton kann man die letzte Nachricht löschen. Es wird dann die vorherige Nachricht angezeigt (falls vorhanden).

    - Durch das puffern der Nachrichten kommt die I2C-LCD-Anzeige nicht mehr dazwischen und somit sind jetzt auch schnellere Schnittstellen-Geschwindigkeiten möglich (z.B. 115200 Baud).

    - Wenn der Nachrichtenspeicher voll ist, wird das als Status an das AutoIt-Programm zurückgeschickt.

    - Beim Start (bzw. Reset) des Nano wird nun die Versionsnummer, die Schnittstellengeschwindigkeit und die Anzahl der speicherbaren Nachrichten angezeigt.

    - Im neuen AutoIt-Programm ("NewsDisplay_AutoIt_v1_1.zip") kann man nun auch die Schnittstellengeschwindigkeit auswählen.

    - Außerdem zeigt es die neuen Statusmeldungen an, sowie die Übertragungsdauer (in ms).

    Dateien

    NewsDisplay_AutoIt.zip 4,3 kB – 656 Downloads NewsDisplay_Arduino.zip 3,38 kB – 653 Downloads NewsDisplay_AutoIt_v1_1.zip 4,45 kB – 667 Downloads NewsDisplayMulti_Arduino_v1_1.zip 4,31 kB – 633 Downloads
  • Ist es möglich, nur Teile eines Scriptes auszuführen?

    • Oscar
    • 5. Januar 2019 um 18:35
    Zitat von A55

    Ist es möglich, Teile eines AutoIt-Scriptes auszuführen, indem man die Zeilen markiert, die ausgeführt werden sollen?

    Nein!

    Zitat von A55

    Oder ist es die einzige Möglichkeit, die Teile eines Scriptes, die nicht ausgeführt werden sollen, auszukommentieren?

    Ja!

  • GIF-Animation mit den neuen AutoIt-Funktionen

    • Oscar
    • 5. Januar 2019 um 18:15

    Ich hatte ja schonmal ein Script zum Thema geschrieben: GIF-Animation mit GDI+

    Aber seit der AutoIt-Version 3.3.14.3 (glaube ich) gibt es ja ein paar zusätzliche GDI+ Funktionen.

    Damit kann man ganz gut GIF-Animationen in eigenen GUIs nutzen. Bei dem Beispielscript (siehe Anhang) habe ich mal das transparente GIF aus dem alten Thread über ein Hintergrundbild gelegt.

    Außerdem wird es jetzt mit "_WinAPI_BitBlt" in die GUI geblittet. Das ist noch etwas schneller.

    Es gibt auch noch einen Pause-Button und im Pause-Modus dann einen Einzelschrittmodus. Zusätzlich wird die Größe und die Anzahl der GIF-Frames angezeigt, sowie die Durchschnittszeit, die AutoIt braucht, um den Frame anzuzeigen.

    Auf meinem Rechner sind das ca. 14ms pro Frame.

    Die GIF-Animation und das Hintergrundbild befinden sich BASE64-kodiert am Ende des Scripts.

    Dateien

    GIF-Anim.au3 704,67 kB – 592 Downloads
  • Adlibregister() vs. Timer

    • Oscar
    • 30. Dezember 2018 um 17:00

    Ich denke mal, der interne Ablauf dürfte in etwa so aussehen:

    C
    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)
    
    Global $aAdlibRegister[0][3], $iAdlibTimer = TimerInit()
    
    Global $iAdlibCount1 = 0, $iAdlibCount2 = 0
    Global $hGui = GUICreate('Test', 640, 480)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    Global $idAdlibLabel1 = GUICtrlCreateLabel($iAdlibCount1, 10, 10, 100, 20)
    Global $idAdlibLabel2 = GUICtrlCreateLabel($iAdlibCount2, 10, 40, 100, 20)
    GUISetState()
    _AdlibRegister('_Adlib1', 2000)
    _AdlibRegister('_Adlib2', 500)
    ;~ AdlibRegister('_Adlib1', 2000)
    ;~ AdlibRegister('_Adlib2', 500)
    
    While True
        _AdlibCall() ; soll den internen Ablauf darstellen
    WEnd
    
    Func _CloseGui()
        Exit
    EndFunc
    
    Func _AdlibCall()
        Local $iCount = UBound($aAdlibRegister), $iDiff = TimerDiff($iAdlibTimer)
        For $i = 0 To $iCount - 1
            If $iDiff > $aAdlibRegister[$i][2] Then
                Call($aAdlibRegister[$i][0])
                $aAdlibRegister[$i][2] = $iDiff + $aAdlibRegister[$i][1]
            EndIf
        Next
    EndFunc
    
    Func _AdlibRegister($sFunction, $iMillis)
        Local $iCount = UBound($aAdlibRegister)
        ReDim $aAdlibRegister[$iCount + 1][3]
        $aAdlibRegister[$iCount][0] = $sFunction
        $aAdlibRegister[$iCount][1] = $iMillis
        $aAdlibRegister[$iCount][2] = TimerDiff($iAdlibTimer) + $iMillis
    EndFunc
    
    Func _Adlib1()
        Local $iTimer = TimerInit()
        $iAdlibCount1 += 1
        ConsoleWrite(StringFormat('!1 = %i Diff = %i\r\n', $iAdlibCount1,  TimerDiff($iAdlibTimer)))
        GUICtrlSetData($idAdlibLabel1, $iAdlibCount1)
        Do
        Until TimerDiff($iTimer) > 600
    EndFunc
    
    Func _Adlib2()
        $iAdlibCount2 += 1
        ConsoleWrite(StringFormat('>2 = %i Diff = %i\r\n', $iAdlibCount2,  TimerDiff($iAdlibTimer)))
        GUICtrlSetData($idAdlibLabel2, $iAdlibCount2)
    EndFunc
    Alles anzeigen

    Edit: Eine kleine Korrektur. Es war die TimerDifferenz plus die Aufrufmillis für den neuen Aufruf. So entspricht es aber dem originalen AdlibRegister.

  • Adlibregister() vs. Timer

    • Oscar
    • 30. Dezember 2018 um 15:40

    AdlibRegister ist blockierend!

    Die Funktion, die dort aufgerufen wird, blockiert das Hauptscript und alle weiteren Adlib-Funktionen.

    Mal als Beispiel:

    Code
    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)
    Global $iAdlibCount1 = 0, $iAdlibCount2 = 0
    Global $hGui = GUICreate('Test', 640, 480)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    Global $idAdlibLabel1 = GUICtrlCreateLabel($iAdlibCount1, 10, 10, 100, 20)
    Global $idAdlibLabel2 = GUICtrlCreateLabel($iAdlibCount2, 10, 40, 100, 20)
    GUISetState()
    AdlibRegister('_Adlib1', 5000)
    AdlibRegister('_Adlib2', 500)
    While Sleep(1000)
    WEnd
    
    Func _CloseGui()
        Exit
    EndFunc
    
    Func _Adlib1()
        Local $iTimer = TimerInit()
        $iAdlibCount1 += 1
        GUICtrlSetData($idAdlibLabel1, $iAdlibCount1)
        Do
        Until TimerDiff($iTimer) > 5000
    EndFunc
    
    Func _Adlib2()
        $iAdlibCount2 += 1
        GUICtrlSetData($idAdlibLabel2, $iAdlibCount2)
    EndFunc
    Alles anzeigen

    "_Adlib2()" wird erstmal alle 500 ms aufgerufen, bis das erste Mal "_Adlib1()" aufgerufen wird. Die Funktion braucht 5 Sekunden und wird nicht unterbrochen. Wenn die 5 Sekunden um sind, kommt einmal "_Adlib2()" dran und dann gleich wieder "_Adlib1()".

    Deswegen sollte die aufgerufene Funktion nie länger dauern, als bis zum nächsten Aufruf.

  • Flash-Test

    • Oscar
    • 29. Dezember 2018 um 13:48

    Die nächste Version ist fertig! Siehe Post#1.

    Es sind nun 2 Prozesse, die sich die Arbeit teilen. Der eine Prozess (FlashTes-Slave) übernimmt die Schreib-/Leseoperationen und der andere Prozess den Rest.

    Das war notwendig, weil es sonst (bei langsamen Laufwerken) extrem hakte.

  • BitOperations64

    • Oscar
    • 27. Dezember 2018 um 16:44
    Zitat von Bitnugger

    jetzt übrigens keine Beispiele mehr, die zeigen, wie es mit einem Array geht... die waren vorher drin und ich würde sie auch wieder hinzufügen.

    Oh mann! Ich bin heute echt nicht voll da! :whistling:

    Da war auch noch ein Fehler in den Funktionen zum rotieren/shiften. Der Parameteraufruf war falsch rum.

    Alles ausgebessert und das Beispiel-Script komplett überarbeitet und aufgeräumt (siehe Post#1).

  • Frohe Weihnachten!

    • Oscar
    • 27. Dezember 2018 um 12:16

    Die GDI+ Variante noch um einen Neujahrsgruß erweitert und mehr Farben. ^^

    Code
    #NoTrayIcon
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)
    _GDIPlus_Startup()
    Global Const $aData[] = [ _
            0x22, 0x70, 0x20, 0xF2, 0x79, 0x3C, 0x22, 0xF0, 0x44, 0x1E, 0xF1, 0x7C, 0x22, 0x0E, 0x0F, 0x22, _
            0x14, 0x88, 0x60, 0x13, 0x88, 0x44, 0x22, 0x08, 0x44, 0x22, 0x09, 0x10, 0x36, 0x91, 0x00, 0x14, _
            0x6B, 0xF8, 0xA0, 0x72, 0x78, 0x3C, 0x1C, 0x08, 0x7C, 0x1E, 0x71, 0x10, 0x2A, 0x1F, 0x07, 0x6B, _
            0x14, 0x88, 0x20, 0x12, 0x88, 0x44, 0x10, 0x08, 0x44, 0x22, 0x81, 0x10, 0x22, 0x11, 0x08, 0x14, _
            0x22, 0x88, 0x20, 0xF2, 0x89, 0x44, 0x0C, 0xF0, 0x44, 0x22, 0x79, 0x10, 0x22, 0x91, 0x07, 0x22, _
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
            0x38, 0x22, 0x0F, 0x38, 0x10, 0x71, 0x3C, 0x1E, 0x11, 0x44, 0x3E, 0x11, 0x44, 0x3E, 0x8E, 0x07, _
            0x44, 0x26, 0x11, 0x44, 0x10, 0x89, 0x44, 0x22, 0x11, 0x4C, 0x02, 0x11, 0x44, 0x02, 0x91, 0x08, _
            0x7C, 0x2A, 0x11, 0x7C, 0xF0, 0xF9, 0x3C, 0x1E, 0x0E, 0x54, 0x0E, 0x15, 0x38, 0x0E, 0x9F, 0x07, _
            0x44, 0x32, 0x11, 0x44, 0x10, 0x89, 0x04, 0x02, 0x08, 0x64, 0x02, 0x1B, 0x20, 0x02, 0x91, 0x08, _
            0x44, 0x22, 0x0F, 0x44, 0x10, 0x89, 0x04, 0x02, 0x06, 0x44, 0x3E, 0x11, 0x18, 0x3E, 0x91, 0x08]
    Global $hGui = GUICreate('We wish you...', 800, 150, -1, -1, BitOR($WS_POPUPWINDOW, $WS_CAPTION))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUISetBkColor(0x000000)
    GUISetIcon('imageres.dll', -204)
    GUISetState()
    Global $aColors[] = [0xFFFFFFFF, 0xFFFF9999, 0xFF99FF99, 0xFF99FFFF, 0xFFFFFF99, 0xFF9999FF]
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    _GDIPlus_GraphicsSetInterpolationMode($hGraphic, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    Global $hBrush = _GDIPlus_BrushCreateSolid($aColors[0])
    While Sleep(60)
        For $i = 0 To Int(UBound($aData) / 16) - 1
            For $j = 0 To 15
                For $k = 0 To 7
                    If BitAND($aData[$i * 16 + $j], Int(2 ^ $k)) Then
                        _GDIPlus_GraphicsFillEllipse($hGraphic, 20 + $j * 48 + $k * 6, 24 + $i * 7, 4, 4, $hBrush)
                        _GDIPlus_BrushSetSolidColor($hBrush, $aColors[Random(0, UBound($aColors) - 1, 1)])
                    EndIf
                Next
            Next
        Next
    WEnd
    Func _CloseGui()
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_Shutdown()
        GUIDelete($hGui)
        Exit
    EndFunc
    Alles anzeigen

    Dateien

    BestWishes_GDI+.au3 2,72 kB – 375 Downloads
  • BitOperations64

    • Oscar
    • 27. Dezember 2018 um 12:11
    Zitat von Bitnugger

    In der Funktion _BitRotate64() hat sich ein Fehler eingeschlichen... denn wenn $iRotate = 0 ist, musst du $iValue1 und nicht $iRet zurückgeben!

    Eh, stimmt! Das Gleiche bei "_BitShift64".

    Danke, für den Hinweis! Hab's ausgebessert (Post#1).

  • BitOperations64

    • Oscar
    • 27. Dezember 2018 um 08:57
    Zitat von Mars

    das OnAutoItExitRegister sollte erst nach _MemVirtualAlloc ausgeführt werden, da sonst (zumindest theoretisch) die Möglichkeit besteht, dass _MemVirtualFree aufgerufen wird bevor überhaupt Speicher reserviert wurde.

    Nein, das sollte man nach Möglichkeit nicht tun, jedenfalls nicht, wenn man mehrfach Speicher anfordert. Denn, wenn eine Anforderung fehlschlägt und das Programm deswegen beendet wird, wird der restliche (vorher angeforderte Speicher) nicht mehr freigegeben.

    Deswegen habe ich ja die Abfrage auf "0" eingefügt. So wird nur der Speicher freigegeben, der auch vorher erfolgreich angefordert wurde.

    Aber Du hast insofern recht, dass das OnAutoItExitRegister erst nach der Deklaration der Variablen stehen sollte, sonst meckert AutoIt, dass die Variablen noch nicht deklariert sind.


    Zitat von Bitnugger

    Eine Sache solltest du dir aber unbedingt abgewöhnen... For...Next-Schleifen im globalen Kontext!

    Ja, schuldig im Sinne der Anklage!

    Bei UDFs sollte man besonders auf sowas achten. Aber generell die Funktion "_Main" dafür zu verwenden, ist auch nicht gut.

    Wenn Du das in mehreren UDFs machst, hast Du das Problem, dass es die Funktion doppelt gibt.

    Ich habe die "Mainfunktion" bei mir jetzt mal "__BitOp64OnStart" genannnt.

  • BitOperations64

    • Oscar
    • 26. Dezember 2018 um 11:33
    Zitat von Bitnugger

    Hier als Bsp. bei _BitAND64 (mit max. 8 Parametern), wie ich mir das gedacht habe...

    Ok, das macht Sinn!

    Ich hab's aber noch etwas anders gelöst (ohne Eval).

    Neue Version in Post#1.

  • BitOperations64

    • Oscar
    • 25. Dezember 2018 um 18:28

    Bitnugger hatte bemängelt, dass die UDF bei AND, OR und XOR nur zwei Parameter zulässt. Aber anstatt alle 64-Bit-Zahlen in den Funktionsaufruf zu packen, finde ich es praktischer ein Array mit den Werten zu übergeben.

    Außerdem ist es nicht angebracht, die Assemblerfunktion x-mal aufzurufen (die DllCallAdress-Aufrufe kosten Zeit). Lieber alle Werte in eine Struktur packen, den Pointer übergeben (sowie die Anzahl) und den Rest von Assembler aus erledigen.

    Ich habe die Funktionen mal angepasst (siehe Post #1).

  • Frohe Weihnachten!

    • Oscar
    • 25. Dezember 2018 um 13:23

    Und noch eine GDI+ Variante:

    Code
    #include <GDIPlus.au3>
    Global Const $aData[] = [ _
            0x44, 0x20, 0xF2, 0x79, 0x3C, 0x22, 0x00, 0x4F, 0xE4, 0x11, 0xCF, 0x27, 0xE2, 0xF0, 0x80, 0x08, _
            0x28, 0x60, 0x13, 0x88, 0x44, 0x22, 0x80, 0x40, 0x24, 0x92, 0x00, 0x61, 0x13, 0x09, 0x00, 0x05, _
            0xD6, 0xA0, 0x72, 0x78, 0x3C, 0x1C, 0x80, 0xC0, 0xE7, 0x11, 0x07, 0xA1, 0xF2, 0x71, 0xC0, 0x1A, _
            0x28, 0x20, 0x12, 0x88, 0x44, 0x10, 0x80, 0x40, 0x24, 0x12, 0x08, 0x21, 0x12, 0x81, 0x00, 0x05, _
            0x44, 0x20, 0xF2, 0x89, 0x44, 0x0C, 0x00, 0x4F, 0x24, 0x92, 0x07, 0x21, 0x12, 0x79, 0x80, 0x08]
    _GDIPlus_Startup()
    Global $hGui = GUICreate('best wishes', 800, 80)
    GUISetBkColor(0x000000)
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    _GDIPlus_GraphicsSetInterpolationMode($hGraphic, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    For $i = 0 To 4
        For $j = 0 To 15
            For $k = 0 To 7
                If BitAND($aData[$i * 16 + $j], Int(2 ^ $k)) Then _GDIPlus_GraphicsFillEllipse($hGraphic, 20 + $j * 48 + $k * 6, 25 + $i * 6, 4, 4, $hBrush)
            Next
        Next
    Next
    Do
    Until GUIGetMsg() = -3
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Alles anzeigen
  • Frohe Weihnachten!

    • Oscar
    • 24. Dezember 2018 um 18:20

    Ok, weil das hier ja ein AutoIt-Forum ist, noch ein Script:

    Code
    Global Const $iAppDPI = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI')
    Global $sData = _
            '4420F2793C22004FE411CF27E2F08008' & _
            '28601388442280402492006113090005' & _
            'D6A072783C1C80C0E71107A1F271C01A' & _
            '28201288441080402412082112810005' & _
            '4420F289440C004F2492072112798008'
    Global $sLabel, $iStars
    Global $hGui = GUICreate('best wishes', 800, 90)
    Global $idLabel = GUICtrlCreateLabel('', 15, 10, 780, 70)
    GUICtrlSetFont(-1, 8 / $iAppDPI * 96, 800, 0, 'Courier New')
    For $i = 0 To 4
        For $j = 0 To 15
            $iStars = Dec(StringMid($sData, 1 + $i * 32 + $j * 2, 2))
            For $k = 0 To 7
                $sLabel &= (BitAND($iStars, Int(2 ^ $k)) ? '*' : ' ')
            Next
        Next
        $sLabel &= @CRLF
    Next
    GUICtrlSetData($idLabel, $sLabel)
    GUISetState()
    Do
    Until GUIGetMsg() = -3
    Alles anzeigen
  • Frohe Weihnachten!

    • Oscar
    • 24. Dezember 2018 um 16:50

    Frohe Weihnachten und ein gesundes neues Jahr!

  • Imagesearch crashed nach Hotkey Autoit

    • Oscar
    • 24. Dezember 2018 um 16:42
    Zitat von Asatru

    nein, es geht nur darum das man eben mit leichten Anfängt und sich später steigert, aber wenn es schon am "Fegen" hapert, weil der Besen schief ist oder kaum Bosten hat

    Rumgedruckse ist das, was Du hier tust und der Vergleich hinkt gewaltig.

    "Meister, ich will meine Mofa schneller machen, an welchen Schrauben muss ich drehen?", wäre wohl zutreffender.

  • Imagesearch crashed nach Hotkey Autoit

    • Oscar
    • 24. Dezember 2018 um 11:22
    Zitat von Asatru

    Benötigt man noch irgendetwas Spezielles?

    Ja, Dein Script und für welches Programm Du das einsetzen 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™