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

Beiträge von BugFix

  • ChatGPT für AutoIt - Talk, Ideen, Kuriositäten

    • BugFix
    • 23. Januar 2023 um 11:42
    Zitat von Peter S. Taler

    frag doch mal die KI nach dem deutschen Aquivalent zu bringing coals to Newcastle?

    Getan ^^

    sprichwort2.png

    Dieses deutsche Sprichwort habe ich noch nie gehört. Der Erklärung kann ich nicht folgen, da sie m.M.n. gerade auf das Gegenteil verweist. Eine Überfülle in diesem Bereich? ...unzählige Bettler, die bereits eine Krone haben..??? Würde es heißen: Jedem Bettler... , dann könnte ich das nachvollziehen.

    EDIT:

    Kein Wunder, das ich das nicht kannte - das gibt es gar nicht! - In keinem Sprichwörter / Redewendungen -Lexikon ist ein Verweis darauf.

    Jetzt lügt uns die KI schon rotzfrech ins Gesicht. :rofl:

  • Automatisch Funktionen zusammenklappen in Scite

    • BugFix
    • 23. Januar 2023 um 11:16
    Zitat von Tyzer

    aber gibt es eine Möglichkeit in Scite nur Funktionen zusammenzuklappen (collapse, fold)?

    Jetzt ja. :rofl:

    Beitrag

    SciTE - Fold / Expand mit Pattern für "Startzeile Faltbereich"

    Mit den folgenden beiden Funktionen, schon verpackt als Eintrag für SciTEUser.properties, könnt ihr Bereiche anhand eines Lua-String-Patterns festlegen, die alle gemeinsam ein- oder ausgeklappt werden sollen.

    Ich habe hier im Bsp. die Funktionsdeklaration gewählt. Das Pattern gilt für die erste Zeile des Faltbereiches.

    pattern = '^[Ff][Uu][Nn][Cc]%s'

    Bedeutet:

    - Zeilenanfang

    - "Func" (egal ob Groß- oder Kleinschreibung)

    - Leerzeichen

    EDIT:

    Hatte mich leider in der Zeilenumbrucherkennung vertan, hatte…
    BugFix
    23. Januar 2023 um 11:15
  • SciTE - Fold / Expand mit Pattern für "Startzeile Faltbereich"

    • BugFix
    • 23. Januar 2023 um 11:15

    Mit den folgenden beiden Funktionen, schon verpackt als Eintrag für SciTEUser.properties, könnt ihr Bereiche anhand eines Lua-String-Patterns festlegen, die alle gemeinsam ein- oder ausgeklappt werden sollen.

    Ich habe hier im Bsp. die Funktionsdeklaration gewählt. Das Pattern gilt für die erste Zeile des Faltbereiches.

    pattern = '^[Ff][Uu][Nn][Cc]%s'

    Bedeutet:

    - Zeilenanfang

    - "Func" (egal ob Groß- oder Kleinschreibung)

    - Leerzeichen

    EDIT:

    Hatte mich leider in der Zeilenumbrucherkennung vertan, hatte nur LF erkannt. Jetzt gültig für CRLF.

    EDIT 2:

    Ich sammle hier mal Pattern, wenn mir was einfällt.

    • Funktionsdeklaration: pattern = '^[Ff][Uu][Nn][Cc]%s'
    • UDF-konforme Funktionsheader: pattern = '^; #FUNCTION# '
    .properties
    # 31 FOLD ALL FUNC
    command.name.31.*.au3=Fold all Function definitions
    command.31.*.au3=dostring \
    pattern = '^[Ff][Uu][Nn][Cc]%s' \
    nLine = 0 \
    text = editor:GetText() \
    for line in (text..'\r\n'):gmatch("(.-)"..'\r\n') do \
    if line:find(pattern) then \
    if editor.FoldExpanded[nLine] == true then \
    editor:GotoLine(nLine) \
    scite.MenuCommand(IDM_EXPAND) \
    end end nLine = nLine +1 \
    end
    command.mode.31.*.au3=subsystem:lua
    command.shortcut.31.*.au3=Alt+Shift+F8
    
    
    # 32 UN-FOLD ALL FUNC
    command.name.32.*.au3=Un-Fold all Function definitions
    command.32.*.au3=dostring \
    pattern = '^[Ff][Uu][Nn][Cc]%s' \
    nLine = 0 \
    text = editor:GetText() \
    for line in (text..'\r\n'):gmatch("(.-)"..'\r\n') do \
    if line:find(pattern) then \
    if editor.FoldExpanded[nLine] == false then \
    editor:GotoLine(nLine) \
    scite.MenuCommand(IDM_EXPAND) \
    end end nLine = nLine +1 \
    end
    command.mode.32.*.au3=subsystem:lua
    command.shortcut.32.*.au3=Alt+Shift+F9
    Alles anzeigen

    Passt die command-Nr. und den shortcut an euer System an (Wie es geht habe ich schon in mehreren Posts hier beschrieben).

    Das könnt ihr dann auch für andere Bereiche nutzen, die ihr in einem Rutsch aus- oder einklappen möchtet. Die Zeile mit der Pattern-Definition dazu entsprechend anpassen.

    Viel Spaß. :thumbup:

  • ChatGPT für AutoIt - Talk, Ideen, Kuriositäten

    • BugFix
    • 23. Januar 2023 um 08:47

    Es lohnt sich immer nachzufragen. Man bekommt mit der ersten Antwort nicht zwingend die richtige, sondern die scheinbar passendste. :/

    sprichwort.png

    EDIT:

    Übrigens finde ich die Formulierung "..mit unerwarteten oder unvorbereiteten Fähigkeiten" eine recht elegante Umschreibung für "..dümmsten". :P

  • Variable used without being declared - nach dem compilieren

    • BugFix
    • 20. Januar 2023 um 14:12
    Zitat von Kanashius

    Ich würde davon abraten, bool Variablen mit == True zu vergleichen.

    :?::?::?:

    Jetzt bin ich geplättet: Du rätst davon ab, eine Boolsche Variable mit einem Boolschen Wert zu vergleichen?!

    Muss man das verstehen?

    Hättest du gesagt, du rätst davon ab mit dem AutoIt-Scheiß von Variant-Datentyp zu vergleichen - das könnte ich nachvollziehen - aber hier fehlen mir die Worte.

    EDIT:

    Zitat von Kanashius

    In manchen Sprachen ist True nicht als 1 definiert, sondern als "nicht 0", also nicht false. Deshalb kann es passieren, dass dort z.B. eine 3 zurückgegeben wird. Dann würde der Test mit ==True fehlschlagen,

    Hier widersprichst du dir selbst: Wenn die Variable den Wert "1" oder "3" (oder jeden anderen Wert ungleich True/False) hat ist sie keine Boolsche Variable!

    Die missbräuchliche Verwendung in Bool-Variablen ist wiederum dem Variant-Datentyp geschuldet. - Was am Anfang durchaus hilfreich scheint, erweist sich immer mehr als zweifelhafte Lösung.

  • Automatisch Funktionen zusammenklappen in Scite

    • BugFix
    • 20. Januar 2023 um 09:14
    Zitat von Tyzer

    in Scite nur Funktionen zusammenzuklappen (collapse, fold)

    Ist m.W. nicht als Standard implementiert.

    Ähnlich wie bei der Lösung:

    Beitrag

    SciTE - Toggle Folding #Region

    Mit diesem kleinen Tool lassen sich per Hotkey alle Regionen im Skript aus-/einklappen. Die anderen Faltungen in Funktionen etc. sind davon nicht betroffen.

    Einfach in eurer SciTEUser.properties bei einer freien Nummer eintragen:

    (Quelltext, 10 Zeilen)

    BugFix
    17. September 2013 um 23:18

    sollte man das aber in Lua lösen können.

    Bin mir grad nicht sicher, ob der aktuelle Status (ein-/ausgeklappt) auslesbar ist. Wenn nicht, wird immer nur auf den anderen Zustand geschaltet. Du würdest als beim Zusammenklappen evtl. bereits zuvor geschlossene Bereiche ausklappen.

  • Variable used without being declared - nach dem compilieren

    • BugFix
    • 18. Januar 2023 um 10:48

    Ich hatte für SciTE noch eine weitere Debug-Möglichkeiten geschaffen:

    Beitrag

    SciTE - Debug Function Call (in au3 Datei)

    Angeregt durch diese Anfrage habe ich nach einer möglichst komfortablen Lösung gesucht.

    Herausgekommen ist: DebugFuncCallSC.lua und DebugFuncCallSC.au3

    (Quelltext, 27 Zeilen)

    Das Lua-Skript liest den Funktionsnamen aus, prüft ob diese Funktion im aktuellen Skript oder in einem der vorhandenen Includes deklariert wurde (falls nicht ist es eine native Funktion) und ermittelt die Zeile in der der Befehlsaufruf steht. Alles wird dann in eine temporäre Datei geschrieben.

    Das AutoIt-Skript schubst das…
    BugFix
    8. Juni 2021 um 14:50

    Vielleicht hilft dir das.

  • Performance-Analyse der neuen Datenstruktur "Map"

    • BugFix
    • 18. Januar 2023 um 09:59

    Sorry an AspirinJunkie , wenn wir hier etwas OT gehen.

    Zitat von Mars

    Das Erwartete Ergebnis im folgenden Code ist, dass Array[Array[Func()]] insgesamt 4x Func() aufruft. Es sind aber trotzdem nur 2x. Es zeigt sich, dass das innere $Array[Func()] nur 1x evaluiert,

    Ich vermute mal so, anhand deines Bsp. Array[Array[Func()]] :

    Der Ausdruck zur Definition des Index wird immer 2-mal ausgeführt. Mit der Einschränkung der Auflösung von Innen nach Aussen.

    Wurde der innere Ausdruck [Func()] bereits aufgelöst, erfolgt das beim zweiten Aufruf nicht mehr. Dann wird nur noch der äußere Lesezugriff Array[Resultat_2.ter_Aufruf_Func] ausgeführt. Und das Lesen verweist dann beim 1.ten und auch beim 2.ten mal auf den selben Wert, sodass wir keinen Mehrfachzugriff registrieren.

    Ist aber nur eine Vermutung - in die inneren Abläufe können wir ja leider nicht reinschauen.

    Ich hab das mal nachgestellt, und das erklärt dann auch, warum in AutoIt keine Index-Generator-Funktion implementiert wurde. :P

    Spoiler anzeigen
    AutoIt
    #include <Array.au3>
    
    Global $a[10]
    
    For $i = 1 To 5
        $a[_Idx()] = $i
    Next
    
    _ArrayDisplay($a)
    
    Func _Idx()
        Local Static $i = -1
        $i += 1
        ConsoleWrite('Index aktuell: ' & $i & @CRLF)
        Return $i
    EndFunc
    
    #cs OUTPUT
    Index aktuell: 0
    Index aktuell: 1
    Index aktuell: 2
    Index aktuell: 3
    Index aktuell: 4
    Index aktuell: 5
    Index aktuell: 6
    Index aktuell: 7
    Index aktuell: 8
    Index aktuell: 9
    #ce
    Alles anzeigen

    f_as_idx_1.png

    EDIT:

    schräger Hack für Index-Generator
    f_as_idx_2.png
  • Beispiele, Gedanken und Tipps bei der Nutzung von INI-Dateien

    • BugFix
    • 16. Januar 2023 um 18:50

    Nunja, grundsätzlich ist eine INI das, was der Name suggeriert: eine Initialisierungsdatei.

    Also gehören dort in erster Linie Angaben rein, die zum Start des Programms erforderlich sind bzw. zu dessen Modifikation durch den Anwender.

    Da INIs einfach zu händeln sind, werden sie auch oft als kleine Datenbanken *missbraucht*. Das ist auch nicht verwerflich, wenn es klein und übersichtlich bleibt. Wie Peter S. Taler schrieb, ist hier die Frage der Geschwindigkeit maßgebend.

  • Bug oder nicht Bug oder wenigstens ungereimt?

    • BugFix
    • 16. Januar 2023 um 14:02
    Zitat von Peter S. Taler

    sofern das Programm im Wurzelverzeichnis F:\test.exe liegt wird F:\ zurückgegeben. Liegt das Programm aber in einem Ordner z.B. F:\Ordner\test.exe wird F:\Ordner zurückgegeben.

    Ja, das ist eine Windowsmacke. "F:" ist laut Windows kein Ordner sondern ein Laufwerk und bekommt deshalb den Backslash verpasst. Ist idiotisch.

    Ich verwende in der Regel die Lösung, von allen Pfadangaben immmer evtl. folgende Backslash zu killen. Nur eine Zeile: StringRegExpReplace("PFAD_mit_ohne_BS", '\\$', '')

    AutoIt
    $sPath1 = "F:\"
    $sPath2 = "F:\Data"
    $sPath3 = "F:\Data\"
    
    
    ConsoleWrite(StringRegExpReplace($sPath1, '\\$', '') & @CRLF)
    ConsoleWrite(StringRegExpReplace($sPath2, '\\$', '') & @CRLF)
    ConsoleWrite(StringRegExpReplace($sPath3, '\\$', '') & @CRLF)
    
    
    #cs OUTPUT
    F:
    F:\Data
    F:\Data
    #ce
    Alles anzeigen
  • Portable - Starter

    • BugFix
    • 16. Januar 2023 um 13:48

    Ich vermute mal, dass ihr ebenfalls portable Programme in einem Ordner führt und von dort per Verknüpfung / Hotkey / Menü die Programme aufruft.

    Ich habe mir jetzt eine GUI mit Übersicht über alle Programmordner erstellt. Beim Auswählen eines Ordners werden die enthaltenen EXE-Dateien aufgelistet. Beim Klick auf diese schließt die GUI und startet die EXE.

    Um jetzt nicht händisch aktiv werden zu müssen, wenn ich Programme hinzufüge oder entferne, habe ich eine INI-Datei, die automatisiert erstellt wird und aus der die GUI die Daten zieht. Bei Änderungen einfach die makeINI neu aufrufen und die INI wird neu erstellt.

    Nun brauch ich nur noch einen Hotkey zum Einblenden der GUI.

    AutoIt: makeINI.au3
    ;-- TIME_STAMP   2023-01-16 13:32:45
    
    #cs
        Automatisiertes Erstellen einer INI mit folgenden Daten
        - INI-Name: "NAME_vom_RootOrdner.ini"
        - Struktur im RootOrdner: OrdnerName\*.exe  (mehrere EXE möglich)
        - für jeden Ordner wird eine Sektion erstellt: "OrdnerName"
        - in jeder Sektion werden die Schlüssel:
            "path"=kpl. Ordnerpfad
            "run"=file1.exe|file2.exe|...
          angelegt
        Sollten neue Ordner hinzugefügt worden sein - Programm erneut ausführen, alte INI wird gelöscht.
    #ce
    
    #include <File.au3>
    #include <Array.au3>
    
    _Scan()
    
    Func _Scan()
        Local $INI = @ScriptDir & '\' & StringTrimLeft(@ScriptDir, StringInStr(@ScriptDir, '\', 0, -1)) & '.ini'
        If FileExists($INI) Then FileDelete($INI)
        Local $aFolder = _FileListToArray(@ScriptDir, '*', 2, True)
        If Not @error Then
            For $i = 1 To $aFolder[0]
                _CreateSection($INI, $aFolder[$i])
            Next
        EndIf
    EndFunc
    
    
    Func _CreateSection($INI, $_sPath)
        Local $aEXE = _FileListToArray($_sPath, '*.exe', 1)
        If Not @error Then
            Local $sSection = StringTrimLeft($_sPath, StringInStr($_sPath, '\', 0, -1))
            IniWrite($INI, $sSection, 'path', $_sPath)
            IniWrite($INI, $sSection, 'run', _ArrayToString($aEXE, '|', 1))
        EndIf
    EndFunc
    Alles anzeigen
    AutoIt: PortableRun.au3
    ;-- TIME_STAMP   2023-01-16 13:36:42
    
    
    #cs
        Nutzt INI, die mit "makeINI.au3" erstellt wurde
    #ce
    
    
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListBox.au3>
    #include <GuiListView.au3>
    #include <WinAPIIcons.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    
    Global $mSections, $hGui, $cListProg, $hLVRun, $hImage
    
    _CreateGUI()
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    
    GUISetState(@SW_SHOW, $hGui)
    
    
    While True
        Switch GUIGetMsg()
            Case -3
                _GUIImageList_Destroy($hImage)
                Exit
            Case $cListProg
                _LV_AddItemWithImage()
        EndSwitch
    WEnd
    
    
    
    
    Func _CreateGUI()
        Local $aAll = _INIReadAllSections()
        $mSections = $aAll[1]
    
        $hGui = GUICreate('Portable', 320, 595, @DesktopWidth-330, 10)
    
        GUICtrlCreateLabel('Programm Ordner', 10, 15)
        $cListProg = GUICtrlCreateList('', 10, 35, 300, 450, BitOR(0x00800000,0x00200000)) ; ($WS_BORDER,$WS_VSCROLL)
        GUICtrlSetData($cListProg, $aAll[0])
        _GUICtrlListBox_SetCurSel(GUICtrlGetHandle($cListProg), 0)
    
        Local $cLVRun = GuiCtrlCreateListView('Ausführen', 10, 495, 300, 90)
        $hLVRun = GUICtrlGetHandle($cLVRun)
        _GUICtrlListView_SetColumnWidth($hLVRun, 0, $LVSCW_AUTOSIZE_USEHEADER )
    
        _LV_AddItemWithImage()
    EndFunc
    
    
    Func _INIReadAllSections()
        Local $INI = @ScriptDir & '\' & StringTrimLeft(@ScriptDir, StringInStr(@ScriptDir, '\', 0, -1)) & '.ini'
        Local $aSections = IniReadSectionNames($INI)
        Local $map[]
        For $i = 1 To $aSections[0]
            $map[$aSections[$i]] = _newMap()
            $map[$aSections[$i]]['path'] = IniRead($INI, $aSections[$i], 'path', '')
            $map[$aSections[$i]]['run'] = IniRead($INI, $aSections[$i], 'run', '')
        Next
        Local $aRet[] = [_ArrayToString($aSections, '|', 1), $map]
        Return $aRet
    EndFunc
    
    
    Func _newMap()
        Local $m[]
        Return $m
    EndFunc
    
    
    Func _LV_AddItemWithImage()
        _GUICtrlListView_DeleteAllItems($hLVRun)
        _GUIImageList_Destroy($hImage)
        $hImage = _GUIImageList_Create(16, 16, 5, 3)
        Local $aExe = StringSplit($mSections[GUICtrlRead($cListProg)]['run'], '|')
        Local $sPath = $mSections[GUICtrlRead($cListProg)]['path']
        Local $aIconSmall
        For $i = 1 To $aExe[0]
            If _WinAPI_ExtractIconEx($sPath & '\' & $aExe[$i], -1, 0, $aIconSmall, 0) = 0 Then
                _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 98) ; add default
            Else
                _GUIImageList_AddIcon($hImage, $sPath & '\' & $aExe[$i])
            EndIf
        Next
        _GUICtrlListView_SetImageList($hLVRun, $hImage, 1)
        For $i = 1 To $aExe[0]
            _GUICtrlListView_AddItem($hLVRun, $aExe[$i], $i-1)
        Next
    EndFunc
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        If HWnd($tNMHDR.hWndFrom) = $hLVRun Then
            If $tNMHDR.Code = $NM_CLICK Then
                Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                Local $sItem = _GUICtrlListView_GetItemText($hLVRun, $tInfo.Index)
                Exit ShellExecute($mSections[GUICtrlRead($cListProg)]['path'] & '\' & $sItem)
            EndIf
        EndIf
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    Alles anzeigen

    portable_run.png

    Dateien

    PortableRun.au3 3,2 kB – 158 Downloads makeINI.au3 1,28 kB – 164 Downloads
  • Artikelpreise aus Onlinekatalog in Rechnungsprogramm oder .xlsx

    • BugFix
    • 13. Januar 2023 um 20:43

    Meine Erfahrung:

    Beim Lieferanten wird in die Runde gefragt, wie man denn eine Preisliste verwalten kann.

    Irgendein Spezi sagt dann, er kann da was mit Excel machen. Und dann passiert das Schlimme: Er will es "schön" machen. Mit Pivot Tabellen und Makros ohne Ende.

    Einziges Ziel: Einfaches Einpflegen von Änderungen. Aber kein Gedanke daran eine schnittstellenbasierte Ausgabe zu schaffen.

    Ich kotze da auch immer ab. Wir bekommen von einem Lieferanten immer solche rotzigen Makroverseuchten Excel Tabellen. Da darf ich dann immer erst mal alle Abhängigkeiten von Kreuz und quer auf linear umschlüsseln.

    Für sowas ist wirklich CSV wesentlich besser geeignet oder JSON - aber Excel? <X:thumbdown:

  • Mehrfach Null-terminierten String auslesen

    • BugFix
    • 12. Januar 2023 um 18:26
    Zitat von AspirinJunkie

    Du hast sicherlich auch kurz daran gedacht aber gar nicht erst probiert da es abwegig klang - stimmts?...

    Du kannst Gedanken lesen.... :rofl:

    War wirklich mein erster Gedanke. Dann habe ich aber die Stringlänge im Puffer mit StringLen() geprüft und festgestellt, dass dort bei der ersten Null-Terminierung Schluss ist. Also habe ich verallgemeinert, dass alle nativen Stringfunktionen so vorgehen - erscheint ja irgendwie logisch. :whistling:

    Zitat von AspirinJunkie

    Nun der Vorteil meiner Methode im Vergleich zu deiner bisherigen (abgesehen von der Performance) ist, dass meine Variante auch mit UTF-16 kodierten Strings klar käme,

    Das ist super, feine Lösung. Danke. :thumbup:

  • Mehrfach Null-terminierten String auslesen

    • BugFix
    • 11. Januar 2023 um 18:49

    Ich bin auf das Problem gestoßen, einen String, der mehrere Null-Terminierungen enthält, zu Lesen.

    Die Funktion "GetPrivateProfileString" liefert solch einen String, deshalb habe ich hiermit ein Bsp. erstellt.

    Der folgende Aufruf liefert die Sektionsnamen einer INI-Datei in der Form:

    Sektion_1 Chr(0) Sektion_2 Chr(0) ... Sektion_n Chr(0) Chr(0)

    In der dritten Variante gehe ich den Umweg über ein Byte-Array. Da kann ich die Null-Bytes sauber auslesen, ohne das danach abgebrochen wird.

    Aber ist das tatsächlich der einzige Weg - oder sehe ich gerade den Wald vor lauter Bäumen nicht? :/

    AutoIt
    $sINI = "Eine *.ini"
    
    ; mit Sektion=Null werden alle Sektionsnamen hintereinander Null-terminiert ausgegeben. Nach dem letzten Element folgt eine zusätzliche Null.
    _Ini_Read_1($sINI)  ; korrekte Pufferlänge, aber nur erstes Element
    ConsoleWrite(@CRLF)
    
    _Ini_Read_2($sINI)  ; korrekte Pufferlänge, aber nur erstes Element
    ConsoleWrite(@CRLF)
    
    ; mit diesem Umweg klappt es
    _Ini_Read_3($sINI)  ; korrekte Pufferlänge, alle Elemente
    
    
    Func _Ini_Read_1($lpFileName, $lpAppName=Null, $lpKeyName=Null, $lpDefault='')
        Local $0 = Chr(0)
        $lpAppName = $lpAppName = Null ? Null : $lpAppName & $0
        $lpKeyName = $lpKeyName = Null ? Null : $lpKeyName & $0
        $lpDefault = $lpDefault = '' ? '' : $lpDefault & $0
        Local $nSize = 32767
        Local $tString = DllStructCreate('char[' & $nSize & ']')
        Local $aRes = DllCall('kernel32.dll', 'dword', 'GetPrivateProfileString', _
            'str', $lpAppName, _   ; A null-terminated string that specifies the section containing the key name. If this parameter is NULL, the GetPrivateProfileString function copies all section names in the file to the supplied buffer.
            'str', $lpKeyName, _   ; The null-terminated string containing the key name whose associated string is to be retrieved. If this parameter is NULL, all key names in the section specified by the lpAppName parameter are copied to the buffer specified by the lpReturnedString parameter.
            'str', $lpDefault, _   ; A null-terminated default string. If the lpKeyName key cannot be found in the initialization file, GetPrivateProfileString copies the default string to the lpReturnedString buffer. This parameter cannot be NULL. Avoid specifying a default string with trailing blank characters. The function inserts a null character in the lpReturnedString buffer to strip any trailing blanks.
            'struct*', $tString, _ ; Pointer to the buffer that receives the retrieved string.
            'dword', $nSize, _     ; Specifies the size, in characters, of the buffer pointed to by the lpReturnedString parameter.
            'str', $lpFileName & $0)
    ConsoleWrite('Anzahl Zeichen im Puffer: ' & $aRes[0] & @CRLF)
    ConsoleWrite('Inhalt Puffer: ' & DllStructGetData($tString, 1) & @CRLF)
    EndFunc
    
    Func _Ini_Read_2($lpFileName, $lpAppName=Null, $lpKeyName=Null, $lpDefault='')
        Local $0 = Chr(0)
        $lpAppName = $lpAppName = Null ? Null : $lpAppName & $0
        $lpKeyName = $lpKeyName = Null ? Null : $lpKeyName & $0
        $lpDefault = $lpDefault = '' ? '' : $lpDefault & $0
        Local $nSize = 32767
        Local $aRes = DllCall('kernel32.dll', 'dword', 'GetPrivateProfileString', _
            'str', $lpAppName, _
            'str', $lpKeyName, _
            'str', $lpDefault, _
            'str', '', _
            'dword', $nSize, _
            'str', $lpFileName & $0)
    ConsoleWrite('Anzahl Zeichen im Puffer: ' & $aRes[0] & @CRLF)
    ConsoleWrite('Inhalt Puffer: ' & $aRes[4] & @CRLF)
    EndFunc
    
    Func _Ini_Read_3($lpFileName, $lpAppName=Null, $lpKeyName=Null, $lpDefault='')
        Local $0 = Chr(0)
        $lpAppName = $lpAppName = Null ? Null : $lpAppName & $0
        $lpKeyName = $lpKeyName = Null ? Null : $lpKeyName & $0
        $lpDefault = $lpDefault = '' ? '' : $lpDefault & $0
        Local $nSize = 32767
        Local $tBuffer = DllStructCreate('byte[' & $nSize*2 & ']')
        Local $lpReturnedString = DllStructGetPtr($tBuffer)
        Local $aRes = DllCall('kernel32.dll', 'dword', 'GetPrivateProfileString', _
            'str', $lpAppName, _
            'str', $lpKeyName, _
            'str', $lpDefault, _
            'ptr', $lpReturnedString, _
            'dword', $nSize, _
            'str', $lpFileName & $0)
    ConsoleWrite('Anzahl Zeichen im Puffer: ' & $aRes[0] & @CRLF)
    ConsoleWrite('Inhalt Puffer: ' & __MultiStrBinaryToString(DllStructGetData($tBuffer, 1), '|') & @CRLF)
    EndFunc
    
    Func __MultiStrBinaryToString($_sBin, $_sDelim)
        $_sBin = StringTrimLeft($_sBin, 2)
        Local $sOut = '', $iChar, $iLast = ''
        For $i = 1 To StringLen($_sBin) -2 Step 2
            $iChar = StringMid($_sBin, $i, 2)
            If $iChar = '00' Then
                If $iLast = '00' Then ExitLoop
                $iLast = '00'
                $sOut &= $_sDelim
            Else
                $sOut &= Chr('0x' & $iChar)
                $iLast = $iChar
            EndIf
        Next
        $sOut = StringRegExpReplace($sOut, '\' & $_sDelim & '$', '')
        Return $sOut
    EndFunc
    Alles anzeigen
  • Leidiges Flickerproblem

    • BugFix
    • 11. Januar 2023 um 12:13
    Zitat von casi4712

    mir war es gelungen ein statisches Label zu erzeugen

    Wo?

    Du erstellst 3 Variablen für Label ($RamLabel, $PageFreeLabel, $LabelRamknapp), erstellst damit aber nirgendwo ein Label (GuiCtrlCreateLabel). Deine Zuweisungen (GuiCtrlSetData) laufen somit ins Leere.

    Übrigens werden in Funktionen KEINE globalen Variablen deklariert!

  • Exe im Hintergrund laufen lassen

    • BugFix
    • 11. Januar 2023 um 11:44
    Zitat von Windi

    Gibt es eine Möglichkeit die Listboxen anders anzusprechen

    Versuch es mal mit ControlCommand. In der Hilfe steht beschrieben, welche Kommandos für welche Control genutzt werden können.

  • virtuelle Cam

    • BugFix
    • 10. Januar 2023 um 17:04
    Zitat von Alina

    Ich würde gerne ein paar kleine Filmaufnahmen von einem Fenster erstellen.

    Ich verwende oCam. Ist schon älter, seit 2020 nicht weiterentwickelt. Läuft mit Win 7.

  • Text Konvertierung

    • BugFix
    • 10. Januar 2023 um 09:43

    Interessant vermurkst. :D

    Statt

    C3 9F wurde

    C3 83 C2 9F eingefügt.

    Das ist dann auch nicht mehr interpretierbar. Bleibt nur die Frage nach dem Warum. :/

    Wenn ich richtig gesehen habe, hast du die Daten erstmals im Array und schreibst diese dann mit _FileWriteFromArray weg.

    Hier würde ich ansetzen und nicht die Funktion nutzen, sondern mal selbst durch das Array iterieren. Jeden Eintrag mit StringToBinary wandeln und dann angucken was drin ist. Ggf. eine eigene Schreibfunktion erstellen.

  • Text Konvertierung

    • BugFix
    • 10. Januar 2023 um 09:27
    Zitat von Moombas

    In der Datei steht dies als à im Original (UTF8)

    Hab den Thread mal kurz überflogen. Was aus meiner Sicht wichtig ist: WIE schaust du dir die Datei an? In einem Editor - kann sein dass dort falsch dargestellt wird. In SciTE-Output? - dito.

    Was tatsächlich enthalten ist, sagt dir ausschließlich ein Hex-Editor.

    Denn wenn du schreibst, dass in der Datei nur à steht, dann betrachtest du die Datei nicht in UTF8, sondern in ANSI. Die Bytefolge für ß (in UTF8 Kodierung) siehst du im Hex-Editor als: C3 9F.

  • Handwerkerfrage: Trittschall-/Wärmedämmung unter Fliesen

    • BugFix
    • 9. Januar 2023 um 07:52
    Zitat von AspirinJunkie

    Aus welchen konkreten Gründen genau ist Vinyl ein No-Go und Laminat diesem unbedingt vorzuziehen?

    Auch wenn ich kein Experte bin - meine Gründe:

    1. Vinyl hat immer Schadstoffausdünstung, liegt in der Natur des Fabrikats. Bei hochwertigen Produkten wird/sollte das innerhalb nicht gesundheitsgefährdender Grenzen liegen. Aber für mich gilt das Vermeidungsprinzip - wenn eine gute Alternative existiert, dann auch diese nutzen.

    2. Inzwischen überdenke ich schon, ob eine Nachhaltigkeit gegeben ist. Und da fällt die Entscheidung leicht: reines Chemieprodukt vs. überwiegend Naturprodukt.

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™