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

  • Prozedurale Grafik mit der Windows API

    • alpines
    • 14. Mai 2020 um 23:38
    Zitat von UEZ

    Kann jemand bitte testen, ob die Exe Dateien zu starten sind? Ab Windows 7 wäre es für mich interessant.

    Startet beides und postet auch ein Bild:

    pasted-from-clipboard.png

    Wie zu erwarten startet die crinkled Version auch langsamer, die muss vermutlich entpackt werden?

  • RegWrite liefert @error = 1, obwohl RegRead den Wert lesen kann. (Mit Adminrechten)

    • alpines
    • 14. Mai 2020 um 00:59
    Zitat von Musashi

    Meinst Du vielleicht : https://www.autoitscript.com/autoit3/docs/l…Redirection.htm

    War wohl doch nur fürs Dateisystem.

  • RegWrite liefert @error = 1, obwohl RegRead den Wert lesen kann. (Mit Adminrechten)

    • alpines
    • 14. Mai 2020 um 00:28

    Greifst du vielleicht auf den falschen Key zu weil du Win64 verwendest? Es gibt nämlich eine Funktion um das Rerouten zu verhindern, ich weiß allerdings nicht mehr wie die hieß.

  • Combobox Dropdown

    • alpines
    • 13. Mai 2020 um 11:28

    Setz mit GUICtrlSetData den Inhalt der zweiten ComboBox wenn du ein Event von der ersten bekommst.

    Bei der Auswahl solltest du im Switch-Statement entweder das Case $hAusgewaehlteStadt abfragen, (oder event-basiert leicht anders) und dann den entsprechenden Inhalt anzeigen GUICtrlSetData($hStadtInfos, "....")

  • [Nim] Anfangsbuchstaben groß schreiben

    • alpines
    • 7. Mai 2020 um 19:42

    Wieso nicht mit einem Regex replacen?

  • Kann mein eigenes Programm nicht löschen - von Avira keine Unterstützung...

    • alpines
    • 5. Mai 2020 um 18:01
    Zitat von Professor Bernd

    Was können wir dagegen tun?

    Einen Laufzeitcrypter schreiben und den AV-Herstellern einen Schritt voraus sein :>

  • [Nim] und die BASS-Dll

    • alpines
    • 1. Mai 2020 um 00:20
    Zitat von Bitnugger

    So funktioniert es nicht!
    let sMp3File = "F:\Audio\MP3\CD\Top 3000-4ever\Top 3000-4ever 0401-0500\0458. Albert Hammond - The Free Electric Band (1973).mp3"

    Weil du sehr wahrscheinlich die Zeichen escapen musst. Versuchs mal mit \\ statt einem Backslash.

  • _Word_DocPictureAdd - Bild auf Seitengröße einpassen

    • alpines
    • 28. April 2020 um 18:08
    Zitat von Bitnugger

    Genau das will ich ja eben nicht... deshalb verwende ich ja die Word-UDF... schön wäre, wenn man damit die Formatierung ändern könnte.

    Zitat von alpines

    Ich schätze mal diese Funktion gibt es auch in der UDF, oder im COM-Objekt.

    8o

    Ich kenn mich mit der UDF nicht aus, deshalb habe ich dir nur den Weg genannt wie man es manuell macht.

    Vielleicht findest du ja in der Doku zum Objekt die Möglichkeit Formatierungsoptionen eines Objektes zu setzen?

  • _Word_DocPictureAdd - Bild auf Seitengröße einpassen

    • alpines
    • 28. April 2020 um 17:52
    Zitat von Bitnugger

    Das funktioniert soweit auch ganz gut, allerdings werden die Bilder in der PDF-Datei nicht 1:1 übernommen, sondern kleiner dargestellt, als im Original.

    Das liegt sehr wahrscheinlich daran, dass die Formatierung in Word falsch gewählt wurde. Leider hab ich kein Word mehr drauf, also weiß ich nicht mehr wie man exakt die Formatierung anpasst, aber sofern ich mich erinnere war das Rechtsklick aufs Bild > Format > "Passend".

    Dann kannst du das Bild auch dementsprechend verschieben und skalieren. Ich schätze mal diese Funktion gibt es auch in der UDF, oder im COM-Objekt.

    Anschließend brauchst du ja nur zu prüfen ob das Bild zuerst rechts oder unten am Seitenrand überläuft wenn es skaliert. Dann nimmst du diesen Faktor und streckts das Bild auf die Seite.

  • CallTipViewer für PSPad4AutoIt3 - Tester gesucht

    • alpines
    • 26. April 2020 um 19:59

    Thread gelesen und vergessen mich zu melden, passiert in der 'Hektik' der Quarantäne. Her mit der Demo!

  • Text in Bild hinzufügen

    • alpines
    • 26. April 2020 um 19:58

    Ups, ja stimmt. Arbeite mich in C++ ein und bin gedanklich vermutlich schon bei den Referenzen x)

  • Text in Bild hinzufügen

    • alpines
    • 26. April 2020 um 15:23
    Zitat von Tweaky

    Ich vergrößere das Bild auf Desktopgröße bevor ich den Text einfüge.

    Deshalb kann ich doch kein FileCopy verwenden. Oder meinst du was anderes?

    Mein Fehler, ich hab das vergrößern übersehen, aber du kannst es ja auch direkt vergrößern und draufzeichnen. Wozu zwischenspeichern?

    AutoIt
    #Region    ;************ Includes ************
    #Include <GDIPlus.au3>
    #Include <File.au3>
    #EndRegion ;************ Includes ************
    _bild_text("C:\Windows\Web\Wallpaper\Windows\img0.jpg", 500, 500, "Hallo", 50)
    
    Func _bild_text($bild_quelldatei_func, $text_pos_x_func, $text_pos_y_func, $text, $text_schriftgroesse_func)
        _GDIPlus_Startup()
    
        Local $szDrive, $szDir, $szFName, $szExt
    
        ;kompletter Pfad Zielbild
        _PathSplit($bild_quelldatei_func, $szDrive, $szDir, $szFName, $szExt)
    
        Local $desktopbild_zieldatei = $szFName & "2" & $szExt
        Local $zielbild_io = @TempDir & "\" & $desktopbild_zieldatei
    
        Local $hImage = _GDIPlus_ImageLoadFromFile($bild_quelldatei_func)
    
        Local $hBitmap = _GDIPlus_BitmapCreateFromScan0(@DesktopWidth, @DesktopHeight) ;create an empty bitmap
        Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
        _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, @DesktopWidth, @DesktopHeight)
    
        ;Abmaße ermitteln
        Local $iX = @DesktopWidth
        Local $iy = @DesktopHeight
    
        If $text_pos_x_func > 0 Then ;+Wert = Abstand von links
            $iX -= $text_pos_x_func
        Else ;-Wert = Abstand von rechts
            $text_pos_x_func += $iX
        EndIf
    
        If $text_pos_y_func > 0 Then ;+Wert = Abstand von oben
            $iy -= $text_pos_y_func
        Else ;-Wert = Abstand von unten
            $text_pos_y_func += $iy
        EndIf
    
        ;Schrift erstellen
        Local $hFormat = _GDIPlus_StringFormatCreate()
        Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
        Local $hFont = _GDIPlus_FontCreate($hFamily, $text_schriftgroesse_func, 1)
        Local $tLayout = _GDIPlus_RectFCreate($text_pos_x_func, $text_pos_y_func)
    
        ;Ermittelt die Abmaße des Textes
        Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $text, $hFont, $tLayout, $hFormat)
        Local $text_breite = Ceiling(DllStructGetData($aInfo[0], "Width"))
        Local $text_hoehe = Ceiling(DllStructGetData($aInfo[0], "Height"))
    
        ;Zeichnet ein weißes Feld hinter den Text
        Local $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
        _GDIPlus_GraphicsFillRect($hGraphics, $text_pos_x_func, $text_pos_y_func, $text_breite, $text_hoehe, $hBrush2)
    
        ;Zeichnet den Text
        Local $hBrush = _GDIPlus_BrushCreateSolid()
        _GDIPlus_GraphicsDrawStringEx($hGraphics, $text, $hFont, $aInfo[0], $hFormat, $hBrush)
    
        ;Speichert die Datei
        _GDIPlus_ImageSaveToFile($hBitmap, $zielbild_io)
    
        ;Ressourcen freigeben
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_BitmapDispose($hBitmap)
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
    
        _GDIPlus_Shutdown()
    
        ShellExecute($zielbild_io)
    
        Return $zielbild_io
    EndFunc   ;==>_bild_mit_text
    Alles anzeigen

    Du kannst sogar statt 'ner Bitmap zum zwischenspeichern auf dem Original arbeiten:

    AutoIt
    #Region    ;************ Includes ************
    #Include <GDIPlus.au3>
    #Include <File.au3>
    #EndRegion ;************ Includes ************
    _bild_text("C:\Windows\Web\Wallpaper\Windows\img0.jpg", 500, 500, "Hallo", 50)
    
    Func _bild_text($bild_quelldatei_func, $text_pos_x_func, $text_pos_y_func, $text, $text_schriftgroesse_func)
        _GDIPlus_Startup()
    
        Local $szDrive, $szDir, $szFName, $szExt
    
        ;kompletter Pfad Zielbild
        _PathSplit($bild_quelldatei_func, $szDrive, $szDir, $szFName, $szExt)
    
        Local $desktopbild_zieldatei = $szFName & "2" & $szExt
        Local $zielbild_io = @TempDir & "\" & $desktopbild_zieldatei
    
        Local $hImage = _GDIPlus_ImageLoadFromFile($bild_quelldatei_func)
        _GDIPlus_ImageResize($hImage, @DesktopWidth, @DesktopHeight)
    
        Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
    
        ;Abmaße ermitteln
        Local $iX = @DesktopWidth
        Local $iy = @DesktopHeight
    
        If $text_pos_x_func > 0 Then ;+Wert = Abstand von links
            $iX -= $text_pos_x_func
        Else ;-Wert = Abstand von rechts
            $text_pos_x_func += $iX
        EndIf
    
        If $text_pos_y_func > 0 Then ;+Wert = Abstand von oben
            $iy -= $text_pos_y_func
        Else ;-Wert = Abstand von unten
            $text_pos_y_func += $iy
        EndIf
    
        ;Schrift erstellen
        Local $hFormat = _GDIPlus_StringFormatCreate()
        Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
        Local $hFont = _GDIPlus_FontCreate($hFamily, $text_schriftgroesse_func, 1)
        Local $tLayout = _GDIPlus_RectFCreate($text_pos_x_func, $text_pos_y_func)
    
        ;Ermittelt die Abmaße des Textes
        Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $text, $hFont, $tLayout, $hFormat)
        Local $text_breite = Ceiling(DllStructGetData($aInfo[0], "Width"))
        Local $text_hoehe = Ceiling(DllStructGetData($aInfo[0], "Height"))
    
        ;Zeichnet ein weißes Feld hinter den Text
        Local $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
        _GDIPlus_GraphicsFillRect($hGraphics, $text_pos_x_func, $text_pos_y_func, $text_breite, $text_hoehe, $hBrush2)
    
        ;Zeichnet den Text
        Local $hBrush = _GDIPlus_BrushCreateSolid()
        _GDIPlus_GraphicsDrawStringEx($hGraphics, $text, $hFont, $aInfo[0], $hFormat, $hBrush)
    
        ;Speichert die Datei
        _GDIPlus_ImageSaveToFile($hImage, $zielbild_io)
    
        ;Ressourcen freigeben
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_ImageDispose($hImage)
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
    
        _GDIPlus_Shutdown()
    
        ShellExecute($zielbild_io)
    
        Return $zielbild_io
    EndFunc   ;==>_bild_mit_text
    Alles anzeigen
  • Text in Bild hinzufügen

    • alpines
    • 26. April 2020 um 14:10

    Dein Text ist aus dem Bild raus, weil du da die Größe des eigentlichen Bildes draufaddierst.

    Kommentier mal 57/58 aus, dann siehst du deinen Text.

    AutoIt
    $text_pos_x_func += $iX
    $text_pos_y_func += $iy

    Lass dir wenn du dir unsicher bist immer die Werte ausgeben, du siehst bei $text_pos_x_func, dass diese (bei mir) irgendwo bei 3000+ liegen.

    Außerdem brauchst du gar keine GUI zu erzeugen (Z. 37) um das Bild zu kopieren, ich weiß zwar nicht warum du nicht einfach FileCopy nutzt,

    aber du kannst auch Bitmaps ohne GUIs erzeugen. _GDIPlus_BitmapCreateFromScan0.

  • Verständnisfrage zu einer Return-Funktion (Anfänger)

    • alpines
    • 25. April 2020 um 21:22

    Klingt sehr eigenartig, hattest du vielleicht einen Hardcrash deiner AutoIt Exe oder ähnliches?

    Ich hätte auf falsche Parametertypen getippt aber es scheint ja alles OK zu sein.

  • Verständnisfrage zu einer Return-Funktion (Anfänger)

    • alpines
    • 25. April 2020 um 17:06
    Zitat von BugFix

    Also eine andere Art von If-Then-Else.

    Nicht ganz. Der ternäre Operator gibt immer Werte zurück und kann bestimmte Statements nicht ausführen, da sie keine Werte zurückgeben.

    Klassisches Beispiel: ContinueLoop, ContinueCase, Exit, ...

    @kilo Der Operator wird verwendet um elegant If-Verzweigungen einzubinden. Damit spart man sich ein paar Zeilen, hier ein kleines Beispiel:

    Code
    Local $iZahl = 1000
    Local $sString = ""
    
    $sString = ($iZahl < 0 ? "-" : "+") & $iZahl
    
    ; sString= "+1000"
    
    ;statt der langen Variante
    
    If $iZahl < 0 Then
        $sString = "-"
    Else
        $sString = "+"
    EndIf
    
    $sString &= $iZahl
    
    ; sString = "+1000"
    Alles anzeigen
    Zitat von kilo

    $ret = Ping("www.google.com",150

    ConsoleWrite("Internet = " & ($ret ? "AN" : "AUS") & @CRLF)

    Dann stimmt was bei dir nicht. Wenn man von der fehlenden Klammer mal absieht, denn bei mir wird AN zurückgegeben.

  • Aufruf von autoit generierter HTML Datei plus Input File ohne Webserver

    • alpines
    • 23. April 2020 um 17:15

    Ich weiß ja nicht wie viele Monde das her ist, aber direkter Dateizugriff ist meist deaktiviert, damit Webseiten nicht den Inhalt des Userdatenträgers auslesen können.

    Nur sollte das eigentlich nicht der Fall sein wenn du die HTML-Datei im Browser öffnest ohne Webserver.

    Anders siehts wiederum aus bei Javascript, dort werden die Dateien auf dem PC mit XMLHttpRequests (oder wie das heißt) angefordert.

    Webbrowser sollten diese direkt blockieren, auch wenn du die HTMl-Datei direkt öffnest.

    Ich kann in deinem Code allerdings nichts davon erkennen, dass die Tabelle in irgendeinerweise direkt in die HTML geladen (oder in die HTML generiert wird).

    Verwendest du JS zum laden sollte es eigentlich reichen, wenn du ein file input verwendest, denn wenn der User die Datei auswählt (die geladen werden soll) lassen Webbrowser für gewöhnlich den Zugriff zu.

    Tutorials wie man Dateien lädt findest du überall im Netz.

  • StringRegExp --> StringRegExpReplace

    • alpines
    • 23. April 2020 um 09:49

    Nimm Insert-Groups, dann musst du den Rest nicht replacen sondern erstellst den String praktisch neu.

    Code
    Local $sBody = BinaryToString(InetRead('http://www.imdb.com/title/tt1399103/'))
    ConsoleWrite(StringRegExpReplace($sBody, "(?s).*strong title=""(.+?)"".*", "\1") & @CRLF)
  • StringRegExp --> StringRegExpReplace

    • alpines
    • 23. April 2020 um 08:53

    Was/Womit willst du denn replacen?

  • RegEx gesucht

    • alpines
    • 21. April 2020 um 14:28
    Zitat von BigRox

    Ich versuche auch möglichst unnötige Variablen zu vermeiden, auch deshalb sieht das letzte Script von Musashi ganz interessant aus, da man damit u.a. auch einige Variablen sparen kann.

    Hä, hast du die überhaupt mein Skript mal angesehen? Dort hast du nur eine zusätzliche Variable, und die ist vom StringRegExp/StringBetween.

    Ist zwar letztlich das selbe Skript aber ich hab das Gefühl du liest hier die Beiträge irgendwie nicht vollständig.

  • RegEx gesucht

    • alpines
    • 21. April 2020 um 12:27
    Zitat von BigRox

    Nur kann man das nicht auch mit einem RegEx machen?

    Ich könnte mir schon vorstellen, dass diese Sache mit RegEx und ohne viel Scripterei zu machen währe.

    Sicherlich geht das, aber du musst nicht zwangsweise mit Kanonen auf Spatzen schießen.

    Ich bin nicht sehr bewandert was RegEx/RegExpReplace angeht, aber du kannst deinen Code auch erheblich kürzen, sofern die Eingabedaten nicht stark variieren (je nach dem was gesucht wird um es zu replacen).

    Hier der Weg den ich dir vor ein paar Posts beschrieben hab:

    Code
    Global $sText = 'Das ist, aber schön, [18, "D:", 34, "X:"][20, 50][3][5, 22][500][60, "D"], Hier ist der, String, zu Ende.'
    
    Global $aRegEx = StringRegExp($sText, "\[(.+?)\]", 3)
    
    For $i = 0 To UBound($aRegEx) - 1
        $sText = StringReplace($sText, $aRegEx[$i], StringReplace($aRegEx[$i], ", ", "- "))
    Next
    
    MsgBox(0, 0, $sText)

    Und um eine persönliche Note reinzubringen:
    Ich bin immer dafür, einfach lesbaren und verständlichen Code zu haben, wenn es das Skript nicht anders erfordert.

    Wenn du in ein paar Wochen/Monaten/Jahren wieder in das Skript reinsiehst, weißt du vielleicht gar nicht mehr wie das Pattern eigentlich funktioniert.

    Also was bringen dir denn drei bis vier gesparte Codezeilen (und vielleicht paar µs Zeitersparnis) wenn der Code unverständlich wird.

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™