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

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

    • BugFix
    • 8. Januar 2023 um 21:29
    Zitat von Peter S. Taler

    Thema Schadstoffe? Da würde ich Laminatböden zu 2000% vorziehen. In mein Schlafzimmer/Kinderzimmer kommt und kam kein Vinyl.

    Dem kann ich nur zustimmen.

    Du findest dazu zwar folgende Aussagen

    Zitat

    Wie bei Laminat gelten auch für Vinylböden die gleichen strengen Sicherheitsstandards der EU-Richtlinien. Somit wird auf giftige Phthalat Weichmacher und andere gesundheitsschädliche Stoffe verzichtet. Moderne Vinylböden von hochwertigen Markenherstellern sind nicht gesundheitsschädlich

    Das kannst du aber getrost in die Tonne kloppen. Wenn ein Hersteller sagt, er hat Vinylboden und im gleichen Atemzug behauptet, dieser beinhaltet kein Vinyl ist das entweder eine nicht ernst zu nehmende Firma (Wer betitelt sein Produkt schon freiwillig nach einem giftigen Inhaltsstoff?) oder sie lügen schlicht.

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

    • BugFix
    • 8. Januar 2023 um 17:20
    Zitat von Peter S. Taler

    Hast Du schon mal darüber nachgedacht, den Laminat auch in die Küche zu legen?

    Ich bin da absolut frei. Aber vielleicht kennst Du das: Frau hat sich etwas in den Kopf gesetzt (Küche - IHR Hoheitsbereich!) und wenn Du den Familienfrieden nicht auf Dauer gefährden willst, lässt Du besser jede Diskussion außen vor. :rofl:

    Zitat von Peter S. Taler

    Egal welche Unterlage Du verwendest, darunter gehört eine Dampfsperre. Auch wenn die Laminatunterlage das bereits integriert hat, die paar Cent für Feuchtesperre als solo Rollenware schaden nicht (in Anbetracht Deines Aufbaus). Sofern du etwas verklebst, eine Epoxitharz Grundierung mit Quarzsand abgesandet auf Deinen Betonboden.

    Folie nur ausrollen und an den Stößen durchgängig mit Klebstreifen verkleben?

    Zitat von Peter S. Taler

    Hunde, Katzen, Geldbeutel, können zu Sonderüberlegungen führen.

    Ja, Hund wird (wieder) zum Haushalt gehören.

    Rein nach Wünschen würde ich für mich am Liebsten überall mehrere Zentimeter dick Kork verlegen. :love: Das ist wirklich ein geiles Gefühl darauf zu Laufen. Aber preislich auch nicht ohne. Und wie Korkboden auf Hundekrallen reagieren würde... keine Ahnung.

    Was Kosten angeht werde ich sicher nicht billig kaufen - aber kostengünstig muss sein. Ich betreibe hier allein eine Komplettsanierung nur mit einem bescheidenen Personenkredit. Mit >60 kannst Du keinen Baukredit mehr zu zahlbaren Konditionen abschließen.

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

    • BugFix
    • 8. Januar 2023 um 10:59

    Ich hoffe unter euch Jemanden mit Erfahrungen zum Thema zu finden. 8)

    Bauliche Gegebenheiten:

    - Altbau (Bj. 1965)

    - nicht unterkellert

    - Boden: 60 cm Sand + 20 cm Beton + Sperrschicht (Teerpappe) + 5 cm Sand + 10 cm Beton - Deckschicht

    Aufgrund des Alters ist Entkoppelung hier kein Thema. Was sich setzen oder verziehen wollte, hat das in den > 60 Jahren auch getan. 8o

    In den Wohnräumen verlege ich Laminat mit entsprechender Unterlage (sowas etwa).

    Die Küche wird gefliest und hier war die Überlegung eine Unterlage mit (hauptsächlich) Wärmedämmeigenschaften einzubringen. Folgende Materialien habe ich dazu gefunden:

    - Gummiunterlage 6 mm (hier ist Wärmedämmung explizit aufgeführt)

    - Gummikork 3 mm (Wärmedämmung: Ja, Verwendung unter Fliesen als Eigenschaft - aber vorrangig unter Laminat, ist es dann wirklich geeignet?)

    - Fliesendämmplatten (Trittschall- und Wärmedämmung, Entkopplung)

    Und dann ist auch schon Schluß. Alles Andere sind Entkopplungsmatten aller Art, die definitiv keine Wärmedämmung haben.

    Leider ist der Begriff "Wärmedämmung" nicht sehr aussagekräftig. Informativer wäre für mich z.B.

    - Untergrund hat 10 °C

    - Raumtemperatur ist 20 °C

    - Wärmeverlust je m² je Stunde = x Watt (und der Vergleichswert ohne Dämmung)

    Ich möchte einfach nur, dass ich nicht das Gefühl aufsteigender Kälte habe, wenn ich mal in einem wirklich kalten Winter in der Küche sitze. ;)

    Fußbodenheizung ist übrigens (aus unterschiedlichen Gründen) keine Option.

    Was könnt ihr aus eurer Erfahrung empfehlen?

    Und eine Anschlussfrage: Falls ich die Gummimatten verwenden würde - wie verlege ich Fliesen darauf?

    Schonmal Danke vorab an alle DIY- und Profihandwerker. ;)

  • Deutsche Hilfe auf 3.3.16.1 updaten - mitmachen

    • BugFix
    • 3. Januar 2023 um 11:27
    Zitat von oh-ha

    Na ja, dann bräuchte es auch keine Deutsche Seite mehr für Autoit.

    Das ist ein Trugschluss. Denn Probleme in einer Fremdsprache zu artikulieren, kann trotz/gerade wegen des Übersetzungsprogramms zu Missverständnissen führen. Du siehst ja oft selbst, dass mancher User Probleme hat, sein Anliegen in der Muttersprache verständlich zu definieren.

    Insofern ist das Forum in der eigenen Sprache schon von Vorteil.

    Die Sinnhaftigkeit der deutschen Hilfe wird ja auch nicht in Abrede gestellt, für Anfänger absolut ein Benefit. Aber bei der Pflege könnte gerade diese Gruppe durch Übersetzungstätigkeit am Meisten profitieren.

  • Deutsche Hilfe auf 3.3.16.1 updaten - mitmachen

    • BugFix
    • 2. Januar 2023 um 18:18

    Dann will ich auch mal meinen Senf dazu geben.

    Als ich 2006 mit AutoIt anfing, musste ich anfangs wirklich jede Funktion in der Hilfe nachschauen. Daraufhin habe ich für mich selbst die englische Hilfe durchgeackert und eine Funktion nach der anderen übersetzt. Der Vorteil: Dadurch wurde mir erst bewusst, WAS ich mit AutoIt alles machen kann. Der Lerneffekt durch das Übersetzen war enorm.

    Insofern kann ich gerade den Usern, die noch am Anfang stehen, nahelegen sich zu beteiligen.

    Ab einem bestimmten Wissensstand willst du aber gar nicht mehr die deutsche Version lesen, weil Vieles im Original einfach klarer rüber kommt.

  • DefineDOSDevice & DefineDOSDeviceCMD

    • BugFix
    • 30. Dezember 2022 um 12:38

    Ich habe jetzt die Kommandozeilenvariante geändert, sodass nur erforderliche Parameter übergeben werden müssen. Die Reihenfolge spielt dabei keine Rolle.

    s. Post #1

  • Jahreswende 2022 / 23

    • BugFix
    • 30. Dezember 2022 um 09:15
    Zitat von Alina

    Was gibt es traditionell bei euch zu essen?

    Wir essen Heringssalat. Aber nicht dieses furchtbare essiglastige Zeugs, was viele Feinkosthändler als Heringssalat bezeichnen. Traditionell wird er aus Salzheringen hergestellt. Inzwischen verwenden wir Matjes dafür, da spart man sich das tagelange Wässern.

    Gefeiert wird nicht besonders. Wir sitzen gemütlich beisammen und ärgern uns, dass das Böllerverbot aufgehoben wurde. :thumbdown:Für die Mehrzahl der Haus- und Wildtiere ist diese hirnlose Ballerei die reinste Folter.

    Ich befürchte, dass dieses Jahr mit nachgeholt wird, was die beiden letzten Jahre verboten war. <X

  • Json

    • BugFix
    • 29. Dezember 2022 um 22:58
    Zitat von Windi

    Ich brauche nur die grünen Daten.

    Meine Frage?

    Kann man das laden nach den Daten abbrechen.

    Du kannst die Datei zum Lesen öffnen und einfach zeilenweise lesen.

    Ungefähr so:

    AutoIt
    Local $fh = FileOpen('Path_to_your.json')
    Local $bRead = False
    Local $line, $aMatch, $length, $time
    While True
        $line = FileReadLine($fh)
        If @error Then
            FileClose($fh)
            ExitLoop
        EndIf
        If $bRead Then
            If StringInStr($line, "lengthInMeters") Then
                $aMatch = StringRegExp($line, 'lengthInMeters:\s+(\d+)', 1)
                $length = $aMatch[0]
            ElseIf StringInStr($line, "travelTimeInSeconds") Then
                $aMatch = StringRegExp($line, 'travelTimeInSeconds:\s+(\d+)', 1)
                $time = $aMatch[0]
                FileClose($fh)
                ExitLoop
            EndIf
        EndIf
        If StringInStr($line, "summary") Then
            $bRead = True
            ContinueLoop
        EndIf
    WEnd
    
    ConsoleWrite('$length: ' & $length & @CRLF)
    ConsoleWrite('$time: ' & $time & @CRLF)
    Alles anzeigen


    Zitat von Windi

    wollte die Datei Test.Json hochladen

    geht nicht (ungültige Dateiendung)

    Einfach zu *.txt umbenennen.

  • DefineDOSDevice & DefineDOSDeviceCMD

    • BugFix
    • 29. Dezember 2022 um 18:40
    Zitat von SOLVE-SMART

    Wird dies gleichermaßen für Windows 10, 8 ggf. sogar noch unter Win 7 und Server-Systemen funktionieren?

    Sofern nicht irgendwelche Rechteeinstellungen dazwischen grätschen, gibt es eigentlich keine Hindernisse.

    Auf Win 7 ist es getestet (ich verwende fast auf allen Rechnern Win 7), Serversysteme könnten vielleicht eine eigene *Aura* haben. :rofl:

  • DefineDOSDevice & DefineDOSDeviceCMD

    • BugFix
    • 29. Dezember 2022 um 14:43

    Nicht wirklich neu, aber nachdem in diesem Thread meine etwas in die Jahre gekommene Ersatzfunktion für subst hervorgewühlt wurde, habe ich mich nochmals damit beschäftigt und etwas aufgeräumt und erweitert.

    ACHTUNG:

    Die Parameterreihenfolge habe ich im Vergleich zur Funktion _PartialDrive geändert. Da das Ziellaufwerk (wenn nicht angegeben) automatisch den nächsten freien Buchstaben (ab E) verwendet, ist es sinnvoller diesen hinter der Pfadangabe zu platzieren. Diese ist im Normalfall zwingend, kann aber auch ohne Angabe genutzt werden und verweist dann auf @MyDocumentsDir.

    Im Gegensatz zur Vorgängerfunktion verzeiht diese auch Falscheingaben (Pfad mit abschließendem Backslash oder Laufwerksangabe ohne Doppelpunkt) und korrigiert das automatisch.

    ERFORDERLICH:

    Stable 3.3.16.1 (Verwendung von Map)

    AutoIt: Beispiel
    #include <Array.au3>
    #include "DefineDosDevice"
    
    _Erstellen()
    
    
    Func _Erstellen()
        Local $drive = _DefineDosDevice() ; erstes freies Lw mit @MyDocumetsDir
        Local $iErr = @error, $iExt = @extended
        If Not $iErr Then
            ConsoleWrite('+> CREATED: ' & $drive & @CRLF)
        Else
            ConsoleWrite('!> ERROR: ' & $iErr & ' EXTENDED: ' & $iExt & @CRLF)
        EndIf
    
        Local $aDrives = _DefineDosDevice('', '', 2)
        _ArrayDisplay($aDrives)
    
        If Not $iErr Then Return _Loeschen($drive)
    EndFunc
    
    
    Func _Loeschen($_drive)
        Local $drive = _DefineDosDevice('', $_drive, 1)
        If Not @error Then
            ConsoleWrite('+> DELETED: ' & $drive & @CRLF)
        Else
            ConsoleWrite('!> ERROR: ' & @error & @CRLF)
        EndIf
        Local $aDrives = _DefineDosDevice('', '', 2)
        _ArrayDisplay($aDrives)
    EndFunc
    Alles anzeigen
    AutoIt: DefineDosDevice.au3
    ;-- TIME_STAMP   2022-12-29 14:15:44   v 0.1
    
    ;===================================================================================================
    ; Function Name .: _DefineDosDevice($_sTargetPath='', $_sDeviceName='', $_iActionFlag=0)
    ; Description ...: Creates or removes a Virtual Drive or lists existing drives. The Drive will be romved automatically on shutdown.
    ; Parameter(s) ..: $_sTargetPath    Path to link the driveletter to
    ;                                       Create: with "" link to @MyDocumentsDir (default)
    ;                  $_sDeviceName    Driveletter of the Drive to create / delete,
    ;                                       Create: with "" the first free drive letter - starts with "E:" - is used (default)
    ;                                       Delete: pass "" - the path connected with the driveletter will be found automatically.
    ;                  $_iActionFlag    0 = Creation (default)
    ;                                   1 = Deletion of the Drive
    ;                                   2 = Return an array of dos drives, if available; [0][0]=counter, [['drive','path']]
    ; Return Value(s): Success          Driveletter of the created/deleted virtual Drive or array with found dos drives
    ;                  Failure          0   @error=1 wrong action flag
    ;                                       @error=2 wrong drive letter     @extended: 1=no free drive letter available; 2=drive letter already exists
    ;                                       @error=3 no valid path to link to
    ;                                       @error=4 action failed
    ;                                       @error=5 no valid drive to delete
    ; Author(s)      : BugFix (autoit@bug-fix.info)
    ; Note           : The function corrects incorrect entries for drive and path specifications.
    ;                  Thus "c:\folder1\folder2\" and "f" are evaluated as correct entries.
    ; Requires       : AutoIt stable min. 3.3.16.1
    ;===================================================================================================
    Func _DefineDosDevice($_sTargetPath='', $_sDeviceName='', $_iActionFlag=0)
        If $_iActionFlag < 0 Or $_iActionFlag > 2 Then Return SetError(1,0,0)
        $_sTargetPath = $_sTargetPath = '' ? @MyDocumentsDir : StringRegExpReplace($_sTargetPath, '\\$', '')
        $_sDeviceName = $_sDeviceName <> '' ? (StringRegExpReplace(StringLower($_sDeviceName), ':*$', '') & ':') : ''
        Local $aDrives, $ret
        Switch $_iActionFlag
            Case 0                          ; create new dos device
                If $_sDeviceName = '' Then  ; get next free drive letter
                    $aDrives = DriveGetDrive("ALL")
                    Local $mDrives[]
                    For $i = 1 To UBound($aDrives) -1
                        $mDrives[StringLeft($aDrives[$i],1)] = 1
                    Next
                    For $j = 101 To 122
                        If Not MapExists($mDrives, Chr($j)) Then
                            $_sDeviceName = Chr($j) & ':'
                            ExitLoop
                        EndIf
                    Next
                    If $_sDeviceName = '' Then Return SetError(2,1,0)
                Else                        ; check if passed drive letter exists
                    If FileExists($_sDeviceName) Then Return SetError(2,2,0)
                EndIf
                If Not FileExists($_sTargetPath) Then Return SetError(3,0,0)
                $ret = DllCall('kernel32.dll', 'long', 'DefineDosDeviceA', _
                               'long', 0x0, 'str', $_sDeviceName, 'str', $_sTargetPath)
                Return SetError(($ret[0]=0?4:0), 0, ($ret[0]<>0?$_sDeviceName:0))
    
            Case 1                          ; determine the path associated with the drive to be deleted
                $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $_sDeviceName, "str", "", "long", 260)
                If $ret[0] = 0 Then
                    Return SetError(4,0,0)
                Else
                    $_sTargetPath = StringRegExpReplace($ret[2], '(\W*)([a-zA-Z].*)', '$2')
                    If Not FileExists($_sTargetPath) Then Return SetError(5,0,0)
                    $ret = DllCall('kernel32.dll', 'long', 'DefineDosDeviceA', _
                                   'long', 0x2, 'str', $_sDeviceName, 'str', $_sTargetPath)
                    Return SetError(($ret[0]=0?4:0), 0, ($ret[0]<>0?$_sDeviceName:0))
                EndIf
    
            Case 2                          ; array of existing dos devices, [0][0]=counter, [['drive','path']]
                $aDrives = DriveGetDrive('FIXED')
                Local $aOut[27][2] = [[0]]
                For $i = 1 To UBound($aDrives) - 1
                    $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $aDrives[$i], "str", "", "long", 260)
                    Local $path = StringRegExpReplace($ret[2], '(\W*)([a-zA-Z].*)', '$2')
                    If StringRegExp($path, '[a-zA-Z]:.*') Then
                        $aOut[0][0] += 1
                        $aOut[$aOut[0][0]][0] = $aDrives[$i]
                        $aOut[$aOut[0][0]][1] = $path
                    EndIf
                Next
                ReDim $aOut[$aOut[0][0]+1][2]
                Return $aOut
        EndSwitch
    EndFunc
    Alles anzeigen


    EDIT:

    Bei administrativer Tätigkeit ist es als Kommandozeilentool sicher besser anwendbar.

    EDIT 2:

    Habe jetzt mehrfach damit gearbeitet - auf der Kommandozeile Leerparameter zu übergeben ist unpraktisch. Hier werde ich noch Änderungen vornehmen.

    EDIT 3:

    Ist geändert - Parameterreihenfolge ist egal. Man übergibt nur die erforderlichen Parameter. Zusätzlich ergänzt um eine Hilfe.

    AutoIt: DefineDosDeviceCMD.au3
    ;-- TIME_STAMP   2022-12-30 12:54:04   v 0.2
    
    #AutoIt3Wrapper_Change2CUI=y
    
    #cs     CMD Line
    
    Syntax:     "Path to DefineDosDeviceCMD.exe" [Switch] [Full Target Path] [Drive Letter]
                The parameters can be specified in any order.
                The search for free drive letters starts at "E:". However, if not occupied, "A:" or "B:" can also be specified.
    
                "Path to DefineDosDeviceCMD.exe"    Compiled program path
                [Switch]                            /c   Create drive (default, omit this parameter)
                                                    /d   Delete drive
                                                    /l   Listing of Dos devices and their paths, if any
                                                    /?   Shows the help
                [Full Target Path]                  /target="Path to link the drive letter to"
                [Drive Letter]                      /drive=F: or /drive=x  Drive letter of the drive to create or delete - omit this, to create with next free letter
    #ce
    
    If $CMDLINE[0] = 0 Then Exit ConsoleWrite('"' & @ScriptName & '"' & @CRLF & 'The program was called without parameters! Call the help (/?)!' & @CRLF)
    
    Global $sHelp = 'Creates or removes a Virtual Drive or lists existing drives. The Drive(s) will be removed automatically on shutdown.' & @CRLF & @CRLF
    $sHelp &= '"Path to DefineDosDeviceCMD.exe" [Switch] [Full Target Path] [Drive Letter]' & @CRLF
    $sHelp &= 'The parameters can be specified in any order.' & @CRLF
    $sHelp &= 'The search for free drive letters starts at "E:". However, if not occupied, "A:" or "B:" can also be specified.' & @CRLF & @CRLF
    $sHelp &= '"Path to DefineDosDeviceCMD.exe"    Compiled program path' & @CRLF
    $sHelp &= '[Switch]                            /c   Create drive (default, omit this parameter)' & @CRLF
    $sHelp &= '                                    /d   Delete drive' & @CRLF
    $sHelp &= '                                    /l   Listing of Dos devices and their paths, if any' & @CRLF
    $sHelp &= '                                    /?   Shows the help' & @CRLF
    $sHelp &= '[Full Target Path]                  /target="Path to link the drive letter to"' & @CRLF
    $sHelp &= '[Drive Letter]                      /drive=F: or /drive=x  Drive letter of the drive to create or delete - omit this, to create with next free letter' & @CRLF
    
    Global $aMatch, $sSwitch, $iFlag, $sTarget, $sDrive, $sOut
    
    ; check for switch
    $aMatch = StringRegExp(StringLower($CMDLINERAW), '(\/[cdl\?])(?!\w)', 1)
    If @error Then
        $sSwitch = '/c'
    Else
        $sSwitch = $aMatch[0]
    EndIf
    If $sSwitch = '/?' Then Exit ConsoleWrite($sHelp & @CRLF)
    If $sSwitch = '/c' Then $iFlag = 0
    If $sSwitch = '/d' Then $iFlag = 1
    If $sSwitch = '/l' Then $iFlag = 2
    
    ; check for target path
    $aMatch = StringRegExp(StringLower($CMDLINERAW), '\/target=(?:"|\x27)(.+)(?:"|\x27)', 1)
    If @error Then
        $sTarget = ""
        If $iFlag = 0 Then Exit ConsoleWrite('[CREATION]    ERROR    The creation requires the specification of a target path!' & @CRLF)
    Else
        $sTarget = $aMatch[0]
    EndIf
    
    ; check for drive letter
    $aMatch = StringRegExp(StringLower($CMDLINERAW), '\/drive=([a-z]:?)', 1)
    If @error Then
        $sDrive = ""
    Else
        $sDrive = $aMatch[0]
    EndIf
    
    Global $vResult = _DefineDosDevice($sTarget, $sDrive, $iFlag)
    Global $iErr = @error, $iExt = @extended
    
    Switch $iFlag
        Case 0
            If $iErr = 2 And $iExt = 1 Then
                $sOut = '[CREATION]    ERROR    No free drive letter available!' & @CRLF
            ElseIf $iErr = 2 And $iExt = 2 Then
                $sOut = '[CREATION]    ERROR    The passed drive letter already exists!' & @CRLF
            ElseIf $iErr = 3 Then
                $sOut = '[CREATION]    ERROR    The path to link to is not valid!' & @CRLF
            Else
                $sOut = '[CREATION]    SUCCESS  Drive "' & StringUpper($vResult) & '" has been created.' & @CRLF
            EndIf
        Case 1
            If $iErr = 4 Then
                $sOut = '[DELETION]    ERROR    The action has failed!' & @CRLF
            Else
                $sOut = '[DELETION]    SUCCESS  Drive "' & StringUpper($vResult) & '" has been deleted.' & @CRLF
            EndIf
        Case 2
            If $vResult[0][0] = 0 Then
                $sOut = '[LISTING]     No DOS devices defined!' & @CRLF
            Else
                $sOut = '[LISTING]  DRIVE  LINKED_TO' & @CRLF
                For $i = 1 To $vResult[0][0]
                    $sOut &= '             ' & StringUpper($vResult[$i][0]) & '   ' &  $vResult[$i][1] & @CRLF
                Next
            EndIf
    EndSwitch
    ConsoleWrite($sOut)
    
    ;===================================================================================================
    ; Function Name .: _DefineDosDevice($_sTargetPath='', $_sDeviceName='', $_iActionFlag=0)
    ; Description ...: Creates or removes a Virtual Drive or lists existing drives. The Drive will be removed automatically on shutdown.
    ; Parameter(s) ..: $_sTargetPath    Path to link the driveletter to
    ;                                       Create: with "" link to @MyDocumentsDir (default)
    ;                  $_sDeviceName    Driveletter of the Drive to create / delete,
    ;                                       Create: with "" the first free drive letter - starts with "E:" - is used (default)
    ;                                       Delete: pass "" - the path connected with the driveletter will be found automatically.
    ;                  $_iActionFlag    0 = Creation (default)
    ;                                   1 = Deletion of the Drive
    ;                                   2 = Return an array of dos drives, if available; [0][0]=counter, [['drive','path']]
    ; Return Value(s): Success          Driveletter of the created/deleted virtual Drive or array with found dos drives
    ;                  Failure          0   @error=1 wrong action flag
    ;                                       @error=2 wrong drive letter     @extended: 1=no free drive letter available; 2=drive letter already exists
    ;                                       @error=3 no valid path to link to
    ;                                       @error=4 action failed
    ;                                       @error=5 no valid drive to delete
    ; Author(s)      : BugFix (autoit@bug-fix.info)
    ; Note           : The function corrects incorrect entries for drive and path specifications.
    ;                  Thus "c:\folder1\folder2\" and "f" are evaluated as correct entries.
    ; Requires       : AutoIt stable min. 3.3.16.1
    ;===================================================================================================
    Func _DefineDosDevice($_sTargetPath='', $_sDeviceName='', $_iActionFlag=0)
        If $_iActionFlag < 0 Or $_iActionFlag > 2 Then Return SetError(1,0,0)
        $_sTargetPath = $_sTargetPath = '' ? @MyDocumentsDir : StringRegExpReplace($_sTargetPath, '\\$', '')
        $_sDeviceName = $_sDeviceName <> '' ? (StringRegExpReplace(StringLower($_sDeviceName), ':*$', '') & ':') : ''
        Local $aDrives, $ret
        Switch $_iActionFlag
            Case 0                          ; create new dos device
                If $_sDeviceName = '' Then  ; get next free drive letter
                    $aDrives = DriveGetDrive("ALL")
                    Local $mDrives[]
                    For $i = 1 To UBound($aDrives) -1
                        $mDrives[StringLeft($aDrives[$i],1)] = 1
                    Next
                    For $j = 101 To 122
                        If Not MapExists($mDrives, Chr($j)) Then
                            $_sDeviceName = Chr($j) & ':'
                            ExitLoop
                        EndIf
                    Next
                    If $_sDeviceName = '' Then Return SetError(2,1,0)
                Else                        ; check if passed drive letter already exists
                    If FileExists($_sDeviceName) Then Return SetError(2,2,0)
                EndIf
                If Not FileExists($_sTargetPath) Then Return SetError(3,0,0)
                $ret = DllCall('kernel32.dll', 'long', 'DefineDosDeviceA', _
                               'long', 0x0, 'str', $_sDeviceName, 'str', $_sTargetPath)
                Return SetError(($ret[0]=0?4:0), 0, ($ret[0]<>0?$_sDeviceName:0))
    
            Case 1                          ; determine the path associated with the drive to be deleted
                $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $_sDeviceName, "str", "", "long", 260)
                If $ret[0] = 0 Then
                    Return SetError(4,0,0)
                Else
                    $_sTargetPath = StringRegExpReplace($ret[2], '(\W*)([a-zA-Z].*)', '$2')
                    If Not FileExists($_sTargetPath) Then Return SetError(5,0,0)
                    $ret = DllCall('kernel32.dll', 'long', 'DefineDosDeviceA', _
                                   'long', 0x2, 'str', $_sDeviceName, 'str', $_sTargetPath)
                    Return SetError(($ret[0]=0?4:0), 0, ($ret[0]<>0?$_sDeviceName:0))
                EndIf
    
            Case 2                          ; array of existing dos devices, [0][0]=counter, [['drive','path']]
                $aDrives = DriveGetDrive('FIXED')
                Local $aOut[27][2] = [[0]]
                For $i = 1 To UBound($aDrives) - 1
                    $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $aDrives[$i], "str", "", "long", 260)
                    Local $path = StringRegExpReplace($ret[2], '(\W*)([a-zA-Z].*)', '$2')
                    If StringRegExp($path, '[a-zA-Z]:.*') Then
                        $aOut[0][0] += 1
                        $aOut[$aOut[0][0]][0] = $aDrives[$i]
                        $aOut[$aOut[0][0]][1] = $path
                    EndIf
                Next
                ReDim $aOut[$aOut[0][0]+1][2]
                Return $aOut
        EndSwitch
    EndFunc
    Alles anzeigen

    So sieht es aus:

    DefineDOSDeviceCMD.png

    Dateien

    DefineDOSDeviceCMD.au3 9,53 kB – 156 Downloads DefineDOSDevice.au3 5,07 kB – 153 Downloads
  • ChatGPT für AutoIt - Talk, Ideen, Kuriositäten

    • BugFix
    • 24. Dezember 2022 um 21:45

    Das Rezept für Wiener Schnitzel ist aber nicht korrekt, bzw. nicht vollständig ausgeführt.

    Das Schnitzel muss im Fett der Pfanne schwimmen, damit die Panade sich voll ausbilden kann.

    **Klugscheißmodus Aus :P

  • subst auch in autoit?

    • BugFix
    • 24. Dezember 2022 um 16:14
    Zitat von Peter S. Taler
    Du bearbeitest den DLL Kernel? Wenn ja woher weiss man was warum usw?


    Nein, ich rufe per DllCall eine Funktion aus der Bibliothek "kernel32.dll" auf. Die Details zum Call findest du in der AutoIt Hilfe.

  • subst auch in autoit?

    • BugFix
    • 24. Dezember 2022 um 06:21
    Zitat von Peter S. Taler

    Nun muss ich Deine Funktion nur noch verstehen

    Habe jetzt den zugehörigen Thread ausgegraben, das erleichtert vllt. das Verstehen.

    Beitrag

    Virtuelles (partielles) Laufwerk Erstellen/Löschen

    Hi,
    hiermit lassen sich Ordner-Pfade zu Virtuellen Laufwerken verknüpfen. Die so erstellten Laufwerke werden nicht in der Registry verewigt und sind nur für die Dauer der Sitzung gültig. Nach einem Neustart ist wieder alles 'normal'.

    Edit 27.12.08:
    Hab das noch etwas erweitert:
    - Standardmäßig wird jetzt der erste freie Laufwerksbuchstabe verwendet
    - der Verknüpfungspfad ist jetzt vorbelegt mit '@MyDocumentsDir' ( aber nur, weil ich die Parameterreihenfolge nicht ändern wollte :D )
    - bei Erfolg wird…
    BugFix
    26. Dezember 2008 um 23:51
  • subst auch in autoit?

    • BugFix
    • 23. Dezember 2022 um 20:08
    Zitat von Musashi

    Dort wird eine UDF von Dir erwähnt,

    Na mit dem Funktionsnamen lässt sich was anfangen.

    AutoIt
    Func _PartialDrive($sDeviceName=-1, $sTargetPath=-1, $iDelete=0)
        If $sDeviceName = -1 And $iDelete = 0 Then
            Local $aDrives = DriveGetDrive("ALL")
            Local $oDrives = ObjCreate("System.Collections.ArrayList")
            For $i = 1 To UBound($aDrives) -1
                $oDrives.Add(Asc(StringLeft($aDrives[$i],1)))
            Next
            Local $j = 100
            While $oDrives.Contains($j)
                $j += 1
                If $j > 122 Then Return SetError(2,0,0)
            WEnd
            $sDeviceName = Chr($j) & ':'
        ElseIf ($sDeviceName = -1 Or Not FileExists($sDeviceName)) And $iDelete = 1 Then
            Return SetError(5,0,0)
        ElseIf $sTargetPath = -1 And $iDelete = 1 Then
            Local $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $sDeviceName, "str", "", "long", 260)
            If $ret[0] = 0 Then
                Return SetError(4,0,0)
            Else
                $sTargetPath = StringRegExpReplace($ret[2], '(\W*)([a-zA-Z].*)', '$2')
            EndIf
        EndIf
        $sDeviceName = StringRegExpReplace(StringLower($sDeviceName), '(.*)([a-z]{1}:)(.*)', '$2')
        If $iDelete = 0 And FileExists($sDeviceName) Then Return SetError(1,0,0)
        If $sTargetPath = -1 Then $sTargetPath = @MyDocumentsDir
        If Not FileExists($sTargetPath) Then Return SetError(3,0,0)
        Local $iFlag = 0x0
        If $iDelete <> 0 Then $iFlag = 0x2
        Local $ret = DllCall('kernel32.dll', 'long', 'DefineDosDeviceA', _
            'long', $iFlag, 'str', $sDeviceName, 'str', $sTargetPath)
        If $ret[0] = 0 Then
            Return SetError(4,0,0)
        Else
            Return $sDeviceName
        EndIf
    EndFunc ;==>PartialDrive
    Alles anzeigen

    Ich hoffe, das hilft weiter.

  • subst auch in autoit?

    • BugFix
    • 23. Dezember 2022 um 19:23
    Zitat von Peter S. Taler

    gerüchteweise hast Du mal eine UDF zu dem Thema geschrieben?

    Was sind denn das für Gerüchte? :rofl:

    Also ich möchte es nicht ausschließen, kann es aber nicht mit Sicherheit bejahen. Mal gucken, ob ich da noch was finde.

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

    • BugFix
    • 23. Dezember 2022 um 13:43

    Ich wollte nun ChatGPT mal auf den Zahn fühlen. Folgende ganz konkrete Frage habe ich gestellt (Ziel: Ich erwarte eine exakte Zuordnung der einzelnen Adern):

    Code
    Ich möchte eine Lampe mit mehreren Schaltstellen installieren.
    A) Zuleitung zur 1. Abzweigdose mit Kabel 3x1,5mm² NYM-J
    B) 1. Schalter (Wechselschalter) zur 1. Abzweigdose mit Kabel 3x1,5mm² NYM-O
    C) 1. Abzweigdose zur 2. Abzweigdose mit Kabel 5x1,5mm² NYM-J
    D) 2. Schalter (Kreuzschalter) zur 2. Abzweigdose mit Kabel 5x1,5mm² NYM-J
    E) 2. Abzweigdose zur 3. Abzweigdose mit Kabel 5x1,5mm² NYM-J
    F) 3. Schalter (Kreuzschalter) zur 3. Abzweigdose mit Kabel 5x1,5mm² NYM-J
    G) 3. Abzweigdose zur 4. Abzweigdose mit Kabel 5x1,5mm² NYM-J
    H) 4. Schalter (Wechselschalter) zur 4. Abzweigdose mit Kabel 3x1,5mm² NYM-O
    I) Lampenkabel zur 4. Abzweigdose mit Kabel 3x1,5mm² NYM-J
    Wie müssen die Kabel in den Abzweigdosen geklemmt werden?
    Alles anzeigen

    Die Antwort von ChatGPT:

    Code
    Es ist wichtig, dass Sie bei der Installation von elektrischen Geräten und Schaltungen immer die geltenden Vorschriften und Normen beachten. 
    Dazu gehört auch, dass die Kabel in den Abzweigdosen ordnungsgemäß angeschlossen werden.
    
    In den meisten Fällen werden die Kabel in den Abzweigdosen wie folgt geklemmt:
    
    1. Zuleitung zur 1. Abzweigdose (A): Die Zuleitung wird in einen der Eingangsanschlüsse der Abzweigdose gesteckt und dann mithilfe eines Kabelschuhs 
       oder eines Schraubverbinders angeschlossen.
    2. 1. Schalter (B) zur 1. Abzweigdose: Das Kabel vom 1. Schalter wird in einen der Ausgangsanschlüsse der Abzweigdose gesteckt und dann mithilfe 
       eines Kabelschuhs oder eines Schraubverbinders angeschlossen.
    3. 1. Abzweigdose zur 2. Abzweigdose (C): Das Kabel zwischen den beiden Abzweigdosen wird in einen der Eingangsanschlüsse der 2. Abzweigdose 
       gesteckt und dann mithilfe eines Kabelschuhs oder eines Schraubverbinders angeschlossen.
    4. 2. Schalter (D) zur 2. Abzweigdose: Das Kabel vom 2. Schalter wird in einen der Ausgangsanschlüsse der 2. Abzweigdose gesteckt und dann mithilfe 
       eines Kabelschuhs oder eines Schraubverbinders angeschlossen.
    5. 2. Abzweigdose zur 3. Abzweigdose (E): Das Kabel zwischen den beiden Abzweigdosen wird in einen der Eingangsanschlüsse der 3. Abzweigdose gesteckt 
       und dann mithilfe eines Kabelschuhs oder eines Schraubverbinders angeschlossen.
    6. 3. Schalter (F) zur 3. Abzweigdose: Das Kabel vom 3. Schalter wird in einen der Ausgangsanschlüsse der 3. Abzweigdose gesteckt und dann mithilfe 
       eines Kabelschuhs oder eines Schraubverbinders angeschlossen.
    7. 3. Abzweigdose zur 4. Abzweigdose (G): Das Kabel zwischen den beiden Abzweigdosen wird in einen der Eingangsanschlüsse der 4. Abzweigdose gesteckt 
       und dann mithilfe eines Kabelschuhs oder eines Schraubverbinders angeschlossen.
    8. 4. Schalter (H) zur 4. Abzweigdose: Das Kabel vom 4. Schalter
    Alles anzeigen

    Na super, Danke für Nichts! Einfach meine Stichpunkte in Sätze packen, das nenne ich Fachkompetenz. :rofl:

    Aber ich gab ihm noch 'ne Chance und spezifizierte:

    Code
    Wie sind die Adern in den Abzweigdosen zu verbinden, welche Ader mit welcher?

    Die Antwort zeigte mir dann, dass ChatGPT nicht Willens ist diese Frage zu beantworten. - Damit muss man also auch rechnen.

    Code
    Die Adern in den Abzweigdosen müssen entsprechend der geltenden Vorschriften und Normen verbunden werden. 
    In der Regel sind die Adern wie folgt zu verbinden:
    
    1. Phase (L): Die Phase, auch als "L" bezeichnet, ist die Stromführende Ader und ist in der Regel braun oder schwarz. 
    Sie wird in den Abzweigdosen in den Anschluss mit dem Symbol "L" oder "Phase" gesteckt.
    
    2. Neutralleiter (N): Der Neutralleiter, auch als "N" bezeichnet, ist die Rückführende Ader und ist in der Regel blau. 
    Er wird in den Abzweigdosen in den Anschluss mit dem Symbol "N" oder "Neutralleiter" gesteckt.
    
    3. Schutzleiter (PE): Der Schutzleiter, auch als "PE" bezeichnet, ist die Schutzader und ist in der Regel grün-gelb. 
    Er wird in den Abzweigdosen in den Anschluss mit dem Symbol "PE" oder "Schutzleiter" gesteckt.
    
    Es ist wichtig, dass die Adern ordnungsgemäß verbunden werden, um die Sicherheit zu gewährleisten. 
    Wenn Sie unsicher sind, wie die Adern in den Abzweigdosen verbunden werden müssen, sollten Sie sich an einen Elektriker 
    oder eine andere qualifizierte Person wenden.
    Alles anzeigen

    EDIT:

    Ich habe nochmal nachgelegt:

    Code
    Kannst du mir einen Schaltplan für diese Schaltung erstellen?

    Antwort:

    Code
    Ja, ich kann Ihnen gerne einen Schaltplan für die von Ihnen beschriebene Schaltung erstellen. Hier ist ein Beispiel für einen möglichen Schaltplan:
    
    [Schaltplan wurde entfernt]
    
    Bitte beachten Sie, dass dies nur ein Beispiel für einen Schaltplan ist und dass es möglicherweise geltende Vorschriften und Normen gibt, die bei der Erstellung eines Schaltplans zu beachten sind. Wenn Sie unsicher sind, wie ein Schaltplan erstellt werden sollte, empfehle ich Ihnen, sich an einen Elektriker oder eine andere qualifizierte Person zu wenden.

    Also JETZT fühle ich mich total verarscht. <X

  • Code Kata - Christmas Tree

    • BugFix
    • 21. Dezember 2022 um 13:42
    Zitat von SOLVE-SMART

    Am Ende keine größe Sache, aber die Verwendung von Strings maskiert hierbei Fehler

    Das stimmt sicher und wir gelangen wieder zum Punkt: Wieviel Fehlermanagement soll der Ersteller einer UDF anbieten und wieviel soll der Anwender tun.

    Ich bin der Meinung, wenn klar definiert ist, wie ein Parameter auszusehen hat (in diesem Fall "String mit einer Funktion"), dann kann die UDF davon ausgehen, dass genau das übergeben wird und muss nicht extra Prüfungen durchführen. Diese Prüfung kann der Anwender problemlos selbst vorab durchführen, z.B. durch exportieren des Codes in eine Temp.au3 und Auswertung dieser mit Syntaxcheck.

  • Code Kata - Christmas Tree

    • BugFix
    • 18. Dezember 2022 um 14:37
    Zitat von Velted

    Da hast Du aber eine Spitze auf einen frischen Austrieb eines jüngst gefällten Tannenbaums gesteckt. ;)

    Definiere Weihnachtsbaum... :whistling:  :rofl:

  • Code Kata - Christmas Tree

    • BugFix
    • 18. Dezember 2022 um 13:50
    Zitat von Velted

    $iZeilen > 32

    Es gibt keinen maximalen Zeilenparameter. Nur das Minimum existiert, ist m.M.n. aber 3:

    Code
      *
      X
     | |
  • Code Kata - Christmas Tree

    • BugFix
    • 18. Dezember 2022 um 13:44

    Mein Beitrag:

    Spoiler anzeigen
    AutoIt
    _WriteXMasTree(8)
    
    Func _WriteXMasTree($_nLines)
        Local $sSpaces = '', $sX = '', $sOut = ''
        For $i = 1 To $_nLines -1
            $sSpaces &= ' '
            $sX &= 'X'
        Next
        $sX &= $sX & 'X'
        For $i = 0 To $_nLines -2
            If ($i = 0 Or $i = 1) Then
                $sOut &= StringLeft($sSpaces, $_nLines) & ($i = 0 ? '*' : 'X') & @CRLF
            Else
                $sOut &= StringLeft($sSpaces, $_nLines -$i) & StringLeft($sX, 2*($i-1)+1) & @CRLF
            EndIf
        Next
        $sOut &= StringLeft($sSpaces, $_nLines -2) & '| |' & @CRLF
        ConsoleWrite($sOut & @CRLF)
    EndFunc
    Alles anzeigen

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™