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

  • ListView Sortierungshäkchen entfernen

    • Oscar
    • 7. August 2019 um 11:48

    Den Workaround braucht man nicht!

    Man holt sich das Handle vom Listview-Header und benutzt dann die Headerbefehle.

    Aber das sortieren im Listview ist sehr langsam, vor allem, wenn es viele Einträge gibt.

    Viel schneller geht das, wenn man die Daten in einem Array speichert und dieses sortiert. Also: Listview komplett löschen, Array sortieren und das Listview wieder mit dem sortierten Array befüllen.

    Ich habe dazu mal ein Beispielscript geschrieben:

    Code
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    
    Global $sHeader = 'Typ|Stock|BT|ZNr.|Büro|Abt.|Benutzer|Hersteller|Modell|Inventarname|Seriennummer|MAC|Hinweise|Telearbeit'
    Global $aLVItems[500][14], $iSortCol = 0, $iOldCol = -1, $iDescending = False
    
    Global $hGui = GUICreate('Test', 800, 600)
    Global $idListview = GUICtrlCreateListView($sHeader, 10, 10, 780, 580)
    Global $hLVheader = _GUICtrlListView_GetHeader($idListview)
    _GUICtrlListView_RegisterSortCallBack($idListview)
    GUISetState()
    _FillLVwithRandomData()
    
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _GUICtrlListView_UnRegisterSortCallBack($idListview)
                Exit
            Case $idListview
                If $iOldCol > -1 Then _GUICtrlHeader_SetItemFlags($hLVheader, $iOldCol, 0)
                $iSortCol = GUICtrlGetState($idListview)
                If $iSortCol = $iOldCol Then $iDescending = Not $iDescending
                _GUICtrlListView_BeginUpdate($idListview)
                ; diese Zeile dauert lange, weil das sortieren im Listview langsam ist
    ;~             _GUICtrlListView_SortItems($idListview, GUICtrlGetState($idListview))
    
                ; diese drei Zeilen sind die schnellere Alternative
                _GUICtrlListView_DeleteAllItems($idListview)
                _ArraySort($aLVItems, $iDescending, 0, 0, $iSortCol)
                _GUICtrlListView_AddArray($idListview, $aLVItems)
    
                _GUICtrlListView_EndUpdate($idListview)
                _GUICtrlHeader_SetItemFlags($hLVheader, $iSortCol, $iDescending ? 8 : 4)
                $iOldCol = $iSortCol
        EndSwitch
    WEnd
    
    Func _FillLVwithRandomData()
        For $iRow = 0 To UBound($aLVItems, 1) - 1
            For $iCol = 0 To UBound($aLVItems, 2) - 1
                $aLVItems[$iRow][$iCol] = Random(10000, 99999, 1)
            Next
        Next
        _GUICtrlListView_AddArray($idListview, $aLVItems)
    EndFunc
    Alles anzeigen
  • AutoIt & Win-Defender - Exes werden willkürlich gelöscht, mal ja, mal nicht.

    • Oscar
    • 4. August 2019 um 19:40

    Das passiert (leider) nicht nur beim Windows Defender. Auch andere AntiViren-Programme sind mitunter der Meinung, dass irgendein (harmloses) AutoIt-Script eine Bedrohung darstellt.

    Da ist mal wieder eine Virensignatur mit der AutoIt-Exe identisch und schon passieren diese "false positive"-Meldungen.

    Ich habe mittlerweile meine AutoIt-Verzeichnisse in die Ausnahmeliste gepackt, weil mich das zu sehr nervt.

    Es nervt mich auch, dass ich den Anwendern meiner Programme immer wieder erzählen muss, dass das kein Virus ist.

    Und ganz besonders nervt es mich, wenn diese "Sch**ss"-Antiviren-Programme meine Programme ins Quarantäneverzeichnis verschieben, ohne um Erlaubnis zu fragen.

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • Oscar
    • 4. August 2019 um 15:03
    Zitat von De Rand Ere

    Die Funktion "_GDIPlus_GraphicsDrawStringEx" bringt keine weiteren Möglichkeiten der Textmanipulation mit sich.

    Doch, eigentlich schon! Wenn man es richtig macht. ;)

    Es wird immer das Rechteck ($tLayout) gefüllt. Für einen Zeilenumbruch muss man aber @LF und nicht @CR verwenden. Unter Windows sowieso am sichersten beides (@CRLF).

    Ich habe die Funktion mal so angepasst, dass es dem Original sehr ähnlich sieht:

    Code
    #include <ButtonConstants.au3>
    #include <FontConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <SendMessage.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIIcons.au3>
    #include <WinAPIInternals.au3>
    #include <WinAPISysInternals.au3>
    
    Global $hGui = GUICreate("Lable über Button", 500, 400)
    GUISetBkColor(0xFFCC01, $hGui) ; gelb
    
    Global $idZulauf = GUICtrlCreateButton('', 120, 10, 220, 100)
    _ButtonSetText(-1, "Zulauf", "HotKey: Alt + z", "Segoe UI", 40, 10)
    
    $idSucheAusgabe1 = GUICtrlCreateButton("Paket" & @CR & @CR & "Ausgabe", 50, 150, 183, 215, $BS_MULTILINE)
    GUICtrlSetFont(-1, 30, $FW_BOLD, 0)
    
    $idSucheAusgabe2 = GUICtrlCreateButton("", 250, 150, 183, 215)
    _ButtonSetText(-1, "Paket" & @LF & @LF & "Ausgabe", "HotKey: Alt + a", "Segoe UI", 28, 10)
    GUISetState(@SW_SHOW, $hGui)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    
    Func _ButtonSetText($idCtrl, $sText1, $sText2, $sFontname, $iFontsize1, $iFontsize2)
        Local $hCtrl, $hParent, $iW, $iH, $hBitmap, $hGraphic, $hBrush, $hFamily, $hFont, $hFormat, $tLayout, $hBMP, $hPrevImage
        _GDIPlus_Startup()
        If $idCtrl = Default Or $idCtrl <= 0 Then $idCtrl = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($idCtrl))
        $hCtrl = GUICtrlGetHandle($idCtrl) ; das Handle vom Controlelement holen
        If Not $hCtrl Then Return SetError(1, 0, False)
        If Not BitAND(_WinAPI_GetWindowLong($hCtrl, $GWL_STYLE), $BS_BITMAP) Then GUICtrlSetStyle($idCtrl, $BS_BITMAP)
        $iW = _WinAPI_GetWindowWidth($hCtrl)
        $iH = _WinAPI_GetWindowHeight($hCtrl)
        $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) ; Eine Bitmap erstellen
        $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Graphic-Context der Bitmap holen
        _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 4) ; Textrendering festlegen
        $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) ; Farbe festlegen (ARGB)
        $hFamily = _GDIPlus_FontFamilyCreate($sFontname) ; Schriftart festlegen
        $hFont = _GDIPlus_FontCreate($hFamily, $iFontsize1, 1) ; Schriftgroesse und -stil fuer Text1 festlegen
        $hFormat = _GDIPlus_StringFormatCreate()
        _GDIPlus_StringFormatSetAlign($hFormat, 1) ; horizontal zentrieren
        _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ; vertikal zentrieren
        $tLayout = _GDIPlus_RectFCreate(1, 4, $iW - 2, $iH - 12) ; Rechteck fuer Text1
        _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText1, $hFont, $tLayout, $hFormat, $hBrush)
        _GDIPlus_FontDispose($hFont)
        $hFont = _GDIPlus_FontCreate($hFamily, $iFontsize2, 0) ; Schriftgroesse und -stil fuer Text2 festlegen
        _GDIPlus_StringFormatSetAlign($hFormat, 2) ; rechts ausrichten
        $tLayout = _GDIPlus_RectFCreate(0, 4, $iW - 20, $iFontsize2 * 2) ; Rechteck fuer Text2
        _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText2, $hFont, $tLayout, $hFormat, $hBrush)
        $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
        $hPrevImage = _SendMessage($hCtrl, $BM_SETIMAGE, $IMAGE_BITMAP, $hBMP)
        If $hPrevImage Then
            If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
        EndIf
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_BitmapDispose($hBitmap)
        _GDIPlus_Shutdown()
    EndFunc   ;==>_ButtonSetText
    Alles anzeigen
  • GUICtrlCreateButton (funktioniert) bzw. GUICtrlCreatePic (funktioniert nicht) aus Ini-Section erstellen

    • Oscar
    • 3. August 2019 um 18:00

    Herzlich Willkommen hier im Forum!

    Bitte poste ein vollständiges (funktionsfähiges) Beispielscript! Außerdem den Inhalt der Inidatei.

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • Oscar
    • 3. August 2019 um 17:55
    Zitat von De Rand Ere

    Wobei der Code-Aufwand für diese paar Buchstaben gigantisch ist.

    Ich hab's Dir doch als Funktion geschrieben.

    Wenn Du nicht nur einen Button damit benutzt, ist es doch schon wieder wenig Code.

    Und im Prinzip könnte man zusätzlich auch noch ein Icon oder so mit auf den Button anzeigen. Solche universellen Buttons bekommt man nunmal nicht "umsonst".

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • Oscar
    • 3. August 2019 um 11:19

    Statt ein Label über den Button zu legen, was öfter zu Problemen beim Refresh führt, würde ich lieber den Text auf eine Bitmap schreiben und diese dem Button zuweisen:

    C
    #include <ButtonConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <SendMessage.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIIcons.au3>
    #include <WinAPIInternals.au3>
    #include <WinAPISysInternals.au3>
    
    Global $hGui = GUICreate("Lable über Button", 500, 400)
    GUISetBkColor(0xFFCC01, $hGui) ; gelb
    
    Global $idZulauf = GUICtrlCreateButton('', 250, 150, 220, 100)
    _ButtonSetText(-1, 'Zulauf', 'Alt + z', 'Arial', 40, 10)
    GUISetState(@SW_SHOW, $hGui)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    
    Func _ButtonSetText($idCtrl, $sText1, $sText2, $sFontname, $iFontsize1, $iFontsize2)
        Local $hCtrl, $hParent, $iW, $iH, $hBitmap, $hGraphic, $hBrush, $hFamily, $hFont, $hFormat, $tLayout, $hBMP, $hPrevImage
        _GDIPlus_Startup()
        If $idCtrl = Default Or $idCtrl <= 0 Then $idCtrl = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($idCtrl))
        $hCtrl = GUICtrlGetHandle($idCtrl) ; das Handle vom Controlelement holen
        If Not $hCtrl Then Return SetError(1, 0, False)
        If Not BitAND(_WinAPI_GetWindowLong($hCtrl, $GWL_STYLE), $BS_BITMAP) Then GUICtrlSetStyle($idCtrl, $BS_BITMAP)
        $iW = _WinAPI_GetWindowWidth($hCtrl)
        $iH = _WinAPI_GetWindowHeight($hCtrl)
        $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) ; Eine Bitmap erstellen
        $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Graphic-Context der Bitmap holen
        _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 4) ; Textrendering festlegen
        $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) ; Farbe festlegen (ARGB)
        $hFamily = _GDIPlus_FontFamilyCreate($sFontname) ; Schriftart festlegen
        $hFont = _GDIPlus_FontCreate($hFamily, $iFontsize1, 0) ; Schriftgroesse und -stil fuer Text1 festlegen
        $hFormat = _GDIPlus_StringFormatCreate()
        _GDIPlus_StringFormatSetAlign($hFormat, 1) ; horizontal zentrieren
        _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ; vertikal zentrieren
        $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH) ; Rechteck fuer Text1
        _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText1, $hFont, $tLayout, $hFormat, $hBrush)
        _GDIPlus_FontDispose($hFont)
        $hFont = _GDIPlus_FontCreate($hFamily, $iFontsize2, 0) ; Schriftgroesse und -stil fuer Text2 festlegen
        _GDIPlus_StringFormatSetAlign($hFormat, 2) ; rechts ausrichten
        $tLayout = _GDIPlus_RectFCreate(0, 4, $iW - 20, $iFontsize2 * 2) ; Rechteck fuer Text2
        _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText2, $hFont, $tLayout, $hFormat, $hBrush)
        $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
        $hPrevImage = _SendMessage($hCtrl, $BM_SETIMAGE, $IMAGE_BITMAP, $hBMP)
        If $hPrevImage Then
            If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
        EndIf
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_BitmapDispose($hBitmap)
        _GDIPlus_Shutdown()
    EndFunc
    Alles anzeigen
  • Checkbox schalten über das Internet - vergleichbar mit Schach online

    • Oscar
    • 1. August 2019 um 15:40

    So, ich hatte jetzt mal etwas Zeit, um das Script zu testen. Es funktioniert also doch noch.

    Um Dir aber mal ein Beispiel für ein Server-/Client-Programm zu zeigen, habe ich mal eine Checkbox eingebaut.

    Wenn man die Checkbox beim Client (de-)aktiviert, wird sie auch beim Server (de-)aktiviert.

    C
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    Global $sTitle = 'Interprozesskommunikation' ; Programmname (für _Singleton)
    Global $sIPAddress = '127.0.0.1' ; Localhost-IP-Adresse
    Global $iPort = 55555 ; beliebige Portnummer (sollte im Bereich zwischen 49152 und 65535 liegen)
    Global $hGui, $idInput, $idCheckbox, $MainSocket, $ConnectedSocket = -1, $sData, $sRecv, $iPID
    
    TCPStartup()
    If _Singleton($sTitle, 1) = 0 Then ; wenn Server bereits gestartet, dann hier als Client weitermachen
        $ConnectedSocket = TCPConnect($sIPAddress, $iPort) ; Verbindung zum Server herstellen
        If @error Then ; wenn nicht erfolgreich, dann Client beenden mit Fehlermeldung
            MsgBox(16, 'FEHLER!', 'TCPConnect fehlgeschlagen! Fehlernr.: ' & @error)
        Else ; TCP-Verbindung war erfolgreich
            $hGui = GUICreate($sTitle & ' - Client', 360, 80)
            $idCheckbox = GUICtrlCreateCheckbox('Checkbox', 10, 10, 120, 20)
            $idInput = GUICtrlCreateInput('', 10, 40, 340, 20)
            GUISetState(@SW_SHOW, $hGui)
            While True
                $sRecv = TCPRecv($ConnectedSocket, 2048) ; Daten abholen
                If $sRecv <> '' Then
                    $sRecv = BinaryToString($sRecv, 4) ; Daten umwandeln
                    If StringLeft($sRecv, 2) = 'cb' Then ; wenn Kommando "cb" empfangen, dann die folgende Zahl (1 oder 0) auswerten
                        GUICtrlSetState($idCheckbox, StringMid($sRecv, 3, 1) = '1' ? $GUI_CHECKED : $GUI_UNCHECKED)
                    EndIf
                EndIf
                Switch GUIGetMsg()
                    Case $GUI_EVENT_CLOSE
                        ExitLoop
                    Case $idCheckbox
                        $sData = BitAND(GUICtrlRead($idCheckbox), $GUI_CHECKED) ? 'cb1' : 'cb0'
                        TCPSend($ConnectedSocket, StringToBinary($sData, 4)) ; Daten an den Server senden
                    Case $idInput
                        $sData = GUICtrlRead($idInput)
                        TCPSend($ConnectedSocket, StringToBinary($sData, 4)) ; Daten an den Server senden
                EndSwitch
            WEnd
            TCPCloseSocket($ConnectedSocket) ; Verbindung zum Server trennen
        EndIf
    Else ; Server läuft noch nicht, also Server starten
        $hGui = GUICreate($sTitle & ' - Server', 360, 480)
        $idCheckbox = GUICtrlCreateCheckbox('Checkbox', 10, 10, 340, 20)
        $idInput = GUICtrlCreateEdit('', 10, 40, 340, 430)
        GUISetState(@SW_SHOW, $hGui)
        $MainSocket = TCPListen($sIPAddress, $iPort)
        If $MainSocket = -1 Then Exit MsgBox(0, $sTitle, 'Server konnte nicht gestartet werden!')
        GUICtrlSetData($idInput, '> Server gestartet!' & @CRLF, 1)
        GUICtrlSetData($idInput, '> Starte Client...' & @CRLF, 1)
        Run(@AutoItExe & ' "' & @ScriptFullPath & '"') ; starte das Script nochmal (als Client)
        If @error Then Exit MsgBox(0, $sTitle, 'Client konnte nicht gestartet werden.')
        GUICtrlSetData($idInput, '> Client gestartet.' & @CRLF, 1)
        While True ; in dieser Schleife wartet der Server auf Daten und es wird GUIGetMsg abgefragt
            If $ConnectedSocket = -1 Then ; wenn noch keine Verbindung hergestellt wurde, dann..
                $ConnectedSocket = TCPAccept($MainSocket) ; abfragen, ob sich der Client verbunden hat
                If $ConnectedSocket <> -1 Then ; wenn Verbindung hergestellt, dann Meldung ausgeben
                    GUICtrlSetData($idInput, '> Verbindung hergestellt.' & @CRLF, 1)
                    GUICtrlSetData($idInput, '> Warte auf Daten...' & @CRLF, 1)
                EndIf
            Else ; Verbindung ist hergestellt
                $sRecv = TCPRecv($ConnectedSocket, 2048) ; Daten abholen
                If @error Then ; wenn dabei ein Fehler aufgetreten ist, dann ist die Verbindung unterbrochen (Client beendet)
                    $ConnectedSocket = -1
                    GUICtrlSetData($idInput, '> Verbindung unterbrochen.' & @CRLF, 1)
                    GUICtrlSetData($idInput, '> Warte auf Verbindung...' & @CRLF, 1)
                Else ; Daten wurden korrekt empfangen
                    $sRecv = BinaryToString($sRecv, 4) ; Daten umwandeln
                    If $sRecv <> '' Then
                        GUICtrlSetData($idInput, $sRecv & @CRLF, 1) ; und im Editfeld ausgeben
                        If StringLeft($sRecv, 2) = 'cb' Then ; wenn Kommando "cb" empfangen, dann die folgende Zahl (1 oder 0) auswerten
                            GUICtrlSetState($idCheckbox, StringMid($sRecv, 3, 1) = '1' ? $GUI_CHECKED : $GUI_UNCHECKED)
                        EndIf
                    EndIf
                EndIf
            EndIf
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $idCheckbox
                    $sData = BitAND(GUICtrlRead($idCheckbox), $GUI_CHECKED) ? 'cb1' : 'cb0'
                    TCPSend($ConnectedSocket, StringToBinary($sData, 4)) ; Daten an den Server senden
            EndSwitch
        WEnd
        GUICtrlSetData($idInput, '> Verbindung getrennt.' & @CRLF, 1)
        GUICtrlSetData($idInput, '> Server wird beendet.' & @CRLF, 1)
        TCPCloseSocket($ConnectedSocket)
        Sleep(1000)
    EndIf
    TCPShutdown()
    Exit
    Alles anzeigen

    Dateien

    _test.au3 4,49 kB – 453 Downloads
  • Checkbox schalten über das Internet - vergleichbar mit Schach online

    • Oscar
    • 1. August 2019 um 05:29

    Oh, ich weiß nicht, ob das Script noch funktioniert!

    Damals ging es, aber an den TCP-Befehlen wurde etwas geändert (AFAIR).

    Ich kann's jetzt gerade nicht testen. Eventuell komme ich nachher dazu. Melde mich dann nochmal...

  • Hallo brauche kurz hilfe wegen PixelSearch

    • Oscar
    • 25. Juli 2019 um 15:25

    Schluß mit dem rumgedruckse! Wir unterstützen keine Pixelklick-Bots (Gamebots).

    [Closed]

  • Schrift Höhe/Länge anpassen

    • Oscar
    • 23. Juli 2019 um 07:08

    Im Prinzip braucht man bloß messen, ob der String komplett in das Feld passt und wenn nicht, dann ein neuer Versuch mit einer kleineren Schriftgröße.

    Ich habe mal ein Script erstellt, was Deine Hintergrundgrafik (aus Post #1) verwendet:

    Code
    #include <GDIPlus.au3>
    
    _GDIPlus_Startup()
    
    Global $sRecordFile = @ScriptDir & "\Images\leer\0.png"
    Global $hRecordImg = _GDIPlus_ImageLoadFromFile($sRecordFile)
    
    Global $sImgFile = @ScriptDir & "\Images\Neu\1.png"
    Global $aText[2] = ["Billy Idol", "Flesh For Fantasy"]
    _CreateNewImage($sImgFile, $aText[0] & @CRLF & $aText[1])
    ShellExecute($sImgFile)
    
    Global $sImgFile = @ScriptDir & "\Images\Neu\2.png"
    Global $aText[2] = ["Bachman Turner Overdrive", "You Ain't Seen Nothing Yet"]
    _CreateNewImage($sImgFile, $aText[0] & @CRLF & $aText[1])
    ShellExecute($sImgFile)
    
    _GDIPlus_ImageDispose($hRecordImg)
    _GDIPlus_Shutdown()
    Exit
    
    
    Func _CreateNewImage($sImgFile, $sText)
        Local $hImage = _GDIPlus_ImageClone($hRecordImg)
        Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
        _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 5)
        _GDIPlus_GraphicsSetInterpolationMode($hGraphic, 7)
        Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF3C4783)
        Local $hFormat = _GDIPlus_StringFormatCreate()
        Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
        Local $aRectSize[4] = [170, 150, 420, 140] ; X, Y, W, H
        Local $tLayout = _GDIPlus_RectFCreate($aRectSize[0], $aRectSize[1], $aRectSize[2], $aRectSize[3])
        Local $hFont, $aInfo, $iFontSize = 24
        Do
            If $hFont Then _GDIPlus_FontDispose($hFont)
            $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, 3)
            $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)
            $iFontSize -= 1
        Until ($aInfo[2] = 2) And (StringLen($sText) = $aInfo[1])
        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iFontSize = ' & $iFontSize + 1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
        _GDIPlus_GraphicsDrawRect($hGraphic, $aRectSize[0], $aRectSize[1], $aRectSize[2], $aRectSize[3]) ; <- nur zum anzeigen der benutzen Flaeche (kann weg)
        _GDIPlus_StringFormatSetAlign($hFormat, 1) ; Text horizontal zentrieren
        _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ; Text vertikal zentrieren
        _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $tLayout, $hFormat, $hBrush)
        _GDIPlus_ImageSaveToFile($hImage, $sImgFile)
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_ImageDispose($hImage)
    EndFunc
    Alles anzeigen

    Dateien

    Test.au3 2,32 kB – 320 Downloads
  • Tastenkombination mit Autoit per Autostart ausführen

    • Oscar
    • 18. Juli 2019 um 16:21

    Versuch's mal mit Send("^!{F9}").

    [STRG] + [ALT] sind oft als Ersatz für die "FN"-Taste gedacht.

  • AutoIt für Linux?

    • Oscar
    • 5. Juli 2019 um 08:26
    Zitat von Musashi

    Könntest Du bitte diesen Thread z.B. nach 'Andere Programmiersprachen' verschieben ?

    Ich hab's mal nach "Off-Topic" verschoben. "Andere Programmiersprachen" trifft es ja nicht unbedingt, eher "Anderes Betriebssystem", aber naja...

  • Verschlüsselten String in Datei schreiben

    • Oscar
    • 27. Juni 2019 um 11:34
    Zitat von xSunLighTx3

    Wäre dann deutlich schwerer, das Passwort über die Strings zu finden.

    Man sollte das Passwort gar nicht im Script speichern!

    Der Benutzer muss das Passwort eingeben, dann dekodiert man die Daten damit und zeigt sie an.

    Bei einem falschen Passwort sind dann halt die angezeigten Daten falsch. :)

    Naja, man könnte noch einen Hashwert des richtigen Passworts mit abspeichern und diesen dann vergleichen.

  • Verschlüsselten String in Datei schreiben

    • Oscar
    • 26. Juni 2019 um 05:19

    Ich würde es so machen:

    C
    #include <Crypt.au3>
    #include <FileConstants.au3>
    
    $sText = "Test"
    $sPassword = "1234"
    $sEncFile = @ScriptDir & "\data.bin"
    _SaveEncryptData($sEncFile, $sText, $sPassword)
    
    $sLoadText = _LoadEncryptData($sEncFile, $sPassword)
    MsgBox(0, "Dateiinhalt", $sLoadText)
    
    Func _SaveEncryptData($sPath, $sText, $sPassword)
        Local $dEncData, $hFile
        $dEncData = _Crypt_EncryptData($sText, $sPassword, $CALG_RC2)
        $hFile = FileOpen($sPath, $FO_BINARY + $FO_OVERWRITE)
        If $hFile = -1 Then Return SetError(1, 0, 0)
        FileWrite($hFile, $dEncData)
        FileClose($hFile)
        Return 1
    EndFunc
    
    Func _LoadEncryptData($sPath, $sPassword)
        Local $dEncData, $hFile
        $hFile = FileOpen($sPath, $FO_BINARY)
        If $hFile = -1 Then Return SetError(1, 0, 0)
        $dEncData = FileRead($hFile)
        FileClose($hFile)
        Return BinaryToString(_Crypt_DecryptData($dEncData, $sPassword, $CALG_RC2))
    EndFunc
    Alles anzeigen
  • Compiler-Einstellungen für PSPad (AutoIt Debug-Ausgabe abfangen)

    • Oscar
    • 10. Juni 2019 um 08:17
    Zitat von alpines

    Oscar kannst du das bitte nach OT/Talk oder sonst was moven? Ein Tutorial ist das hier wahrlich (noch) nicht.

    Ich hab's mal nach H&U verschoben.

  • Icon-Show

    • Oscar
    • 5. Juni 2019 um 19:27
    Zitat von Professor Bernd

    Vielen Dank!

    Gern geschehen!

    Es freut mich, wenn das Tool eine Hilfe für Dich war. :)

  • Dos (CMD) Box auslesen zum 1000sten

    • Oscar
    • 1. Juni 2019 um 16:08
    Zitat von Peter S. Taler

    Local $iPID = WinGetHandle ('Test','')

    Das hier ist bereits falsch!

    WinGetHandle gibt das Handle zum Fenster zurück, nicht die PID.

    Wenn Du weist, wie der Prozess heißt, kannst Du Dir die PID mittels ProcessList holen.

  • ControlSend an DOSBox

    • Oscar
    • 17. Mai 2019 um 08:20
    Zitat von Andy

    Bissl "bitweise zusammengeschoben" um einige Bytes an dem teuren Disketten/Festplattenplatz zu sparen war "State of the art".

    [OT on]

    Da fällt mir mein Programm zur Videocassetten-Verwaltung auf dem C64 wieder ein. Dort habe ich die Bytes "bitweise zusammengeschoben". :)

    Code
    Datum 31.12.2019 als String: 10 Byte (80 Bit)
    
    Datum:
      31 (32)   =  5 Bit
      12 (16)   =  4 Bit
    2019 (2048) = 11 Bit
    ---------------------
                  20 Bit
    Nummer      =  9 Bit
    Bewertung:
    0-3 Sterne  =  2 Bit
    Verliehen:
    Ja/Nein     =  1 Bit
    ---------------------
                  32 Bit
    Alles anzeigen

    So habe ich in der Hälfte der Bytes nicht nur das Datum untergebracht, sondern noch ein paar Zusatzinformationen.

    Da denkt heutzutage keiner mehr drüber nach. Speicherplatz ist ja massig vorhanden.

    [OT off]

  • Chatbox-UDF

    • Oscar
    • 16. Mai 2019 um 16:31
    Zitat von Lottich

    Ich will ein Consolenfenster in dem protokolliert wird, was das Script gerade macht.

    Warum unbedingt ein Consolenfenster?

    Zitat von Lottich

    Ist das mit deiner Chatbox realisierbar? Habs bereits (logischer Weise und weil ich ich bin) erfolglos versucht...

    Würdest du es anders machen oder kennst du eine Alternative die sich so für mich umsetzen lässt?

    Mit der Chatbox-UDF ist das nicht direkt machbar. Sie benutzt keine direkte zeilenbasierte Ausgabe.

    Natürlich könnte man den embedded IE entsprechend anpassen, sodass die HTML-Anweisungen dieses Verhalten bewirken, aber die Änderungen wären schon recht umfangreich.

    Und für mich liest sich das jetzt nicht so, als dass man dafür einen embedded IE brauchen würde.

    Alternativ würde ich eine GUI erstellen, mit Label (bei den Prozentangaben sind Progressbars vorteilhaft) und eventuell einem Listview (wenn Du das als Protokoll darstellen willst).

    Zitat von Lottich

    Möglicherweise bist du in der Lage, deine _FileCopyEx() so für mein Vorhaben anzupassen, dass ich optional

    eine Art "Dateizusammenfügung" starten kann?!

    Mein "_FileCopyEx" kopiert die Dateien lediglich. Um Dateien zusammenzufügen ist (meistens) mehr nötig, als die Daten einfach hintereinander zu kopieren (abhängig vom Dateiformat).

    Du müsstest also schon mehr Informationen liefern:

    - Was sind das für Dateien (Format)?

    - Wie fügst Du sie zusammen (Du schreibst ja, dass das bereits funktioniert)?

    Für die Sachen oben:

    - Wie groß darf die GUI sein (width + height)?

    - Welche Daten sollen wie dargestellt werden?

    Am besten postest Du mal Dein bisheriges Script.

    Ich befinde mich allerdings zur Zeit im Urlaub (Nordsee) und mir stehen somit nicht alle meine AutoIt-Scripte zur Verfügung.

    Und zeitlich ist es momentan auch etwas eng, sodass ich nicht immer gleich antworten bzw. beim erstellen von Scripten helfen kann.

    Allein schon, dass ich nicht zu Hause vor meinen zwei (großen) Bildschirmen sitze und mit einer vernünftigen Tastatur schreiben kann, ist schon eine große Einschränkung. ;)

    Und das Internet ist hier zeitweise auch erheblich eingeschränkt. Ich behelfe mir schon mit meinem Smartphone als Hotspot, aber auch der Mobilfunk-Empfang ist hier nicht immer gut.

    Dafür ist das Wetter ganz schön (wenn auch recht windig)! :)

  • wiederkehrende Abfrage in einer Datenbank bis eine spalte mit ....."Hallo" existiert

    • Oscar
    • 11. April 2019 um 09:17

    [verschoben nach H&U]

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™