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

Beiträge von Ahnungslos

  • AuPDF - PDF Dateien direkt aus AutoIt erstellen

    • Ahnungslos
    • 22. März 2022 um 11:31

    Neue Version und somit erstes Release ist online:

    • mittels ANSI Codierung werden nun deutsche Umlaute unterstützt (@tigerpapers)
    • es werden alle Grafikformate die GDI+ anbietet nun eingebettet (derzeit ohne Alpha-Kanal)
    • kleinere Fehler behoben
  • [Wettbewerb] String komprimieren

    • Ahnungslos
    • 16. März 2022 um 23:35
    Zitat von Oscar

    Wenn ich die Datei als UTF8_NOBOM einlese und die komprimierte Datei als Binary speichere, danach wieder als Binary einlese und mit dem Original vergleiche, dann stimmen die Daten nicht mehr, weil jetzt ANSI.

    Beim Einlesen der Daten mit angegebenem Encoding UTF8_NOBOM, sollte AutoIt es intern in UCS2 umwandeln. Letzten Endes ist die Codierung ja aber egal, es muss nach dem Dekomprimieren nur das gleiche rauskommen, wie die Daten zuvor waren...

    Neuster Stand mit Prekompressor:

    ============================================================

    Result for "Ahnungslos"

    ============================================================

    Decompressed = Original: True

    Length Original: 6033

    Length compressed: 3236

    Length decompressed: 6033

    Compress-Ratio: 46.362 %

    Time compressed: 4420 ms

    Time decompressed: 258 ms

    ============================================================

  • SystemMenü ausblenden aber Icon trotzdem anzeigen, geht das überhaupt?

    • Ahnungslos
    • 4. März 2022 um 14:23

    Wenn du den Schließen-Button nicht entfernst, sondern deaktivierst, dann bleibt auch das Icon erhalten:

    C
    #include <GUIConstants.au3>
    #include <WinAPISysWin.au3>
    
    GuiCreate("Catch the X Click", 300, 100)
    GUISetIcon("C:\Windows\System32\user32.dll", -2)
    GUISetState()
    
    $hHandle = WinGetHandle("Catch the X Click") ; <- Hier den Titel des Windowsfenster eintragen
    RemoveButtons($hHandle)
    DisableCloseButton($hHandle)
    
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                Exit
        EndSelect
    WEnd
    
    Func DisableCloseButton($hWindow)
        Local $aSysMenu = DllCall("User32.dll", "hwnd", "GetSystemMenu", "hwnd", $hWindow, "int", 0)
        DllCall("User32.dll", "int", "RemoveMenu", "hwnd", $aSysMenu[0], "int", 0xF060 , "int", 0)
        DllCall("User32.dll", "int", "DrawMenuBar", "hwnd", $hWindow)
    EndFunc
    
    Func RemoveButtons($hWindow)
        Local $iStyle = _WinAPI_GetWindowLong($hWindow, $GWL_STYLE)
        _WinAPI_SetWindowLong($hWindow, $GWL_STYLE, BitAND($iStyle, BitNOT($WS_MINIMIZEBOX), BitNOT($WS_MAXIMIZEBOX)))
    EndFunc
    Alles anzeigen
  • [Wettbewerb] String komprimieren

    • Ahnungslos
    • 3. März 2022 um 22:41
    Zitat von Oscar

    Dann sieht es ganz danach aus, dass Dein Username nichts mit Deinen AutoIt-Kenntnissen zu tun hat. ;):thumbup:

    Bei AutoIt passt der Name schon ganz gut, bin momentan eher in Java unterwegs...

    Zitat von Mars

    Bei der Länge von 3600 tippe ich mal auf einen statischen Huffman encoder, da kommen bei mir ähnliche Werte raus :thumbup:

    Genau, habe mir den groben Ablauf von Huffman hier angeschaut und versucht umzusetzen. Neben den komprimierten Daten übergebe ich noch das Wörterbuch. Der Decoder erstellt daraus erneut den Baum um die Bits wieder zu entpacken. Das Wörterbuch ist in diesem Beispiel 192 Bytes groß, würde aber noch kleiner gehen.

    Ich beschäftige mich erst seit Dienstag mit dem Thema, daher mal eine doofe Frage. Hat der adaptive Huffman Encoder neben einer schnelleren Laufzeit (nur ein Durchgang) noch weitere Vorteile? Der statische sollte ja eine bessere Komprimierung erreichen, oder bin ich falsch?

  • [Wettbewerb] String komprimieren

    • Ahnungslos
    • 3. März 2022 um 11:44
    Zitat von Oscar

    Nur AutoIt-Code?

    Das Scripting Dictionary kommt zum Einsatz, wäre sicherlich auch mit verschachtelten Arrays möglich, wird aber schnell unübersichtlich. Ansonsten ja, keine Includes und keine DllCalls.

    Ich mache das ganze mal noch hübsch und setze Kommentare.

  • [Wettbewerb] String komprimieren

    • Ahnungslos
    • 3. März 2022 um 08:18

    Von WinRAR noch Welten entfernt, aber ansonsten gefallen mir die Werte schon ganz gut:

    ============================================================

    Result for "Ahnungslos"

    ============================================================

    Decompressed = Original: True

    Length Original: 6033

    Length compressed: 3616

    Length decompressed: 6033

    Compress-Ratio: 40.063 %

    Time compressed: 189 ms

    Time decompressed: 265 ms

    ============================================================

  • [Wettbewerb] String komprimieren

    • Ahnungslos
    • 2. März 2022 um 22:43

    Schönes Thema.

    Oscar könntest du bei der Prüfroutine eine Abfrage einbauen, ob die Daten binär sind? StringLen wandelt die Binärdaten in Hex und gibt dadurch die doppelte Länge zurück.

    Code
    Global $iCompressedLen = IsBinary($vCompressed) ? BinaryLen($vCompressed) : StringLen($vCompressed)
  • Text und Grafik-Datei in PDF umwandeln - Seltsames Verhalten???

    • Ahnungslos
    • 25. Februar 2022 um 15:59

    Den Ansatz von Moombas finde ich gut, eventuell wäre auch AuPDF eine mögliche Lösung: AuPDF 0.13. Ansonsten sollte es auch externe Software geben, die man gut ansteuern kann.

  • Text und Grafik-Datei in PDF umwandeln - Seltsames Verhalten???

    • Ahnungslos
    • 25. Februar 2022 um 13:23

    Die UDF nutzt intern leider globale Variablen, die nach dem Erstellen der PDF nicht bereinigt werden. Heißt also: erstellst du zur Laufzeit 2 PDF-Dateien, dann ist die erste in Ordnung, aber die zweite enthält Daten der ersten. Was dann zu Fehlern führt, da die Datei nicht mehr valide ist.

  • Text in Edit wird nicht markiert

    • Ahnungslos
    • 30. November 2021 um 16:12

    Bei einem mehrzeiligen Control wie einem Edit funktioniert mein Vorschlag leider nicht...

    An sich müsste dein Code eigentlich laufen. Eventuell sind $start_char oder $end_char falsch? Ohne ein minimales lauffähiges Script aber schwer zu sagen.

    Einfacher wäre ein Label über oder neben deinem Edit.

  • Text in Edit wird nicht markiert

    • Ahnungslos
    • 30. November 2021 um 11:21

    Klingt nach Cuebanner...

    C
    #include <GUIConstantsEX.au3>
    #include <EditConstants.au3>
    
    $hGui = GUICreate("", 500, 500)
    
    $cInput = GUICtrlCreateInput("", 10, 10, 200, 20)
    GUICtrlSendMsg($cInput, $EM_SETCUEBANNER, False, "Keys to press (optional)")
    
    $cButton = GUICtrlCreateButton("Test", 10, 100, 80, 30)
    GUICtrlSetState($cButton, $GUI_FOCUS)
    
    GUISetState()
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    Alles anzeigen

    Quelle: https://www.autoitscript.com/forum/topic/16…comment=1226083 (von Melba23)

  • Opsi / Autoit & Netzwerk zugriff

    • Ahnungslos
    • 17. Januar 2020 um 17:56

    Ich würde von der Netzwerkanmeldung absehen, vor allem wenn du dafür Zugangsdaten hinterlegen müsstest. Da du deine selbstgeschrieben EXE eh mit Opsi verteilst, könntest du auch die Installationsdatei mittels FileInstall an deine EXE anhängen. Die Datei dann einfach ins temporäre Verzeichnis entpacken und von dort aus starten. Im Anschluss das Löschen der Installationsdatei nicht vergessen ;)

    PS: viele Installationsroutinen bieten einen silent Parameter und müssen dann nicht "ferngesteuert" werden

  • Forenupdate - November 2018 - Probleme / Anregungen / Feedback - Sammelthread

    • Ahnungslos
    • 16. November 2018 um 20:15

    Hallo Leute, ich schaue hier noch ab und zu vorbei und musste gerade folgendes feststellen:

    Wer nicht angemeldet ist, hat keinen Zugriff mehr aufs Forum. Also auch nicht lesend. Man wird immer wieder auf die Anmeldeseite umgeleitet.

  • Umlaute in einer PDF-Datei

    • Ahnungslos
    • 15. Oktober 2017 um 02:20

    Meines Erachtens ist in Zeile 1184 der MPDF-UDF ein Fehler enthalten, habe es mal abgeändert und angehängt. Geht es damit bei dir?

    Edit: falsche Zeile angegeben

    Dateien

    MPDF_UDF.au3 163,35 kB – 546 Downloads
  • Solitaire classic mit größeren Karten

    • Ahnungslos
    • 9. Januar 2016 um 20:54

    Riesen Dank! :thumbup:

    Das "moderne" XBOX-Solitaire ist nicht zu gebrauchen... Falls du Zeit hast, Bedarf für weiteres ist da ;)
    Werde immer wieder nach den XP-Spielen gefragt.

  • gelöst: Datensatz löschen

    • Ahnungslos
    • 13. Dezember 2015 um 01:03

    In deinem ListView steht an erster Stelle doch die ID...

    Markierte Zeile auslesen, ID von Rest trennen (z.B. StringSplit, StringLeft + StringInStr, ...) und den Datensatz mit der ID löschen.

    Hoffe ich habe dich richtig verstanden 8|

  • WMI Objekte Abfragen

    • Ahnungslos
    • 14. November 2015 um 14:17

    Um Quelltext formatiert ins Forum zu stellen benötigst du den BBCode autoit, also einfach dein Quelltext in [autoit]dein Code[/autoit] stellen.

    Zum eigentlichen Thema:
    GetSecurityDescriptor erzeugt ein Objekt vom Typ SecurityDescriptor und kein Array, daher kannst du mit der For-Schleife nicht darauf zugreifen. Wie der Aufruf richtig aussehen muss, kann ich dir leider nicht sagen. Was für Daten möchtest du denn genau ermitteln?

    Edit:
    Beim quälen der MSDN noch etwas gefunden ;)
    Die gesuchten Informationen stehen nicht im SecurityDescriptor sondern direkt in Win32_LogicalFileSecuritySetting.


    [autoit]


    ;Autoitscript

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

    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

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

    $wbemFlagReturnImmediately = 0x10
    Local $File_Pfad = @WindowsDir & "\hh.exe" ; Nur zum Test, nur Lesezugriff

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

    ; impersonationLevel = impersonate ist bevorzugte Standardvorgabe MS
    Local $Obj_WMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & @ComputerName & "\root\cimv2")

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

    ReadFileOwner_Single($File_Pfad) ; TEST ein Wert auslesen
    ReadFileOwner_Alles($File_Pfad) ; TEST alles auslesen was das Objekt hergibt

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

    Func ReadFileOwner_Single($Obj_CheckFile)
    Dim $Obj_Owner
    $Obj_Owner_of_File = $Obj_WMIService.Get("Win32_LogicalFileSecuritySetting='" & $Obj_CheckFile & "'")
    $intRetVal = $Obj_Owner_of_File.GetSecurityDescriptor($Obj_Owner)

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

    If (IsObj($Obj_WMIService)) And (Not @error) Then ; Ist das Objekt $Obj_WMIService ein bekannetes Objekt
    MsgBox(0, "ReadFileOwner", "Owner: " & $Obj_Owner.Owner.Domain & '\' & $Obj_Owner.Owner.Name)
    Else
    MsgBox(0, "WMI Output", "Keine WMI Objects gefunden: " & "Win32_LogicalFileSecuritySetting")
    EndIf

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

    EndFunc ;==>ReadFileOwner_Single

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

    Func ReadFileOwner_Alles($Obj_CheckFile)
    Local $a_Text = ""
    Local $Obj_Properties = ""
    Dim $Obj_SecureRead

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

    $Obj_Owner_of_File = $Obj_WMIService.Get("Win32_LogicalFileSecuritySetting='" & $Obj_CheckFile & "'")

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

    If (IsObj($Obj_WMIService)) And (Not @error) Then ; Ist das Objekt $Obj_WMIService ein bekannetes Objekt
    ConsoleWrite("Func ReadFileOwner_Alles nach IsObj Abfrage" & @CRLF)

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

    $a_Text &= 'Description: ' & $Obj_Owner_of_File.Description & @CRLF
    $a_Text &= 'Caption: ' & $Obj_Owner_of_File.Caption & @CRLF
    $a_Text &= 'OwnerPermissions: ' & $Obj_Owner_of_File.OwnerPermissions & @CRLF
    $a_Text &= 'ControlFlags ' & $Obj_Owner_of_File.ControlFlags & @CRLF
    $a_Text &= 'Path: ' & $Obj_Owner_of_File.Path & @CRLF
    $a_Text &= 'SettingID: ' & $Obj_Owner_of_File.SettingID & @CRLF

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

    MsgBox(0, "TEST Komplett", $a_Text)
    EndIf
    EndFunc ;==>ReadFileOwner_Alles

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

    ; User's COM error function. Will be called if COM error occurs
    Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
    @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
    @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
    @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
    @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]
  • WMI Objekte Abfragen

    • Ahnungslos
    • 14. November 2015 um 09:40

    Um Com-Fehler abzufangen benötigst du noch eine spezielle Funktion, füge mal folgenden Code in dein Script ein:

    [autoit]

    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

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

    ; ##############
    ; Hier dein Code
    ; ##############

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

    ; User's COM error function. Will be called if COM error occurs
    Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
    @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
    @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
    @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
    @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]


    Dann siehst du, das deine For-Schleife einen Error wirft.

  • Sehr CPU-lastiges script und Kinderkrankheiten

    • Ahnungslos
    • 5. November 2015 um 12:49

    Ja, du kannst dann komplett auf die Case verzichten. Schau dir mal das Beispiel an:
    GUICtrlSetOnEvent

    Jedem Button wird eine Funktion zugeordnet. (Die Funktionen hast du ja schon.)

    In die Schleife mit dem Sleep schreibst du dein Pingaufruf.

  • Sehr CPU-lastiges script und Kinderkrankheiten

    • Ahnungslos
    • 5. November 2015 um 12:08

    Also ohne dein Script getestet zu haben:

    a) Die GuiGetMessage-Schleife sollte immer schnellst möglich ablaufen. Das tut sie durch den Aufruf von _Ping() leider nicht. Schau dir mal den OnEventMode an. Da hast du dann nur noch das Switch mit dem Ping() Aufruf in der Schleife und kannst dort ein kleines Sleep() einfügen.

    b) In der Funktion Ping() haben die Global nichts zu suchen. Du definierst die Variablen korrekt am Anfang des Scriptes und solltest sie dann nur noch befüllen. Ein erneutes anlegen ist hier unnötig.

    c) Du solltest die ganze If Abfragen mit in die Ping Funktion schieben, so werden sie nicht bei jedem Schleifendurchgang abgefragt, sondern nur bei Änderung. Und bitte keine MessageBox in die Message-Schleife ;)

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™