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

Beiträge von Bitnugger

  • Au3Check, Hilfe und Intellisense sind sich uneinig

    • Bitnugger
    • 26. September 2018 um 17:08
    Zitat von autoiter

    Er hat noch einen neunten Parameter ($iAlt_Color).

    ...den es aber ab AutoIt Version 3.3.14.3 nicht mehr gibt. Entweder er entfernt diesen Parameter, oder steigt um auf AutoIt Version 3.3.14.2, was aber keine wirklich gute Entscheidung wäre.

    Solange das VSCode Plugin nicht auf aktuellem Stand ist, wird er immer wieder Probleme dieser Art bekommen... das ist die Strafe dafür, dass man sich nicht an den Standard (SciTE) hält. 8o

  • Au3Check, Hilfe und Intellisense sind sich uneinig

    • Bitnugger
    • 26. September 2018 um 16:40

    Ab AutoIt Version 3.3.14.3 wurde der Aufruf von _ArrayDisplay mit dem Parameter $hUser_Funktion in die Funktion _DebugArrayDisplay ausgelagert... für meine Begriffe völliger Schwachsinn.

    AutoIt
    #include <Array.au3>
    _ArrayDisplay ( Const ByRef $aArray [, $sTitle = "ArrayDisplay" [, $sArrayRange = "" [, $iFlags = 0 [, $vUser_Separator = Default [, $sHeader = Default [, $iMax_ColWidth = Default]]]]]] )
    
    #include <Debug.au3>
    _DebugArrayDisplay ( Const ByRef $aArray [, $sTitle = "DebugArray" [, $sArrayRange = "" [, $iFlags = 0 [, $vUser_Separator = Default [, $sHeader = Default [, $iMax_ColWidth = Default [, $hUser_Function = ""]]]]]]] )
  • Ich möchte gerne Notepad++ (NPP, Notepad Plus Plus) als Editor verwenden!?

    • Bitnugger
    • 25. September 2018 um 18:00

    Vielleicht hilft dir das ja weiter... doch ich denke, irgendwann wirst auch du an den Punkt kommen und erkennen, dass es verschwendete Zeit war, Notepad++ als Editor für AutoIt verwenden zu wollen. Bei mir hat es fast 4 Wochen gebraucht. ;)

    https://www.autoitscript.com/forum/topic/18…ide-for-autoit/

    Notepad++ und AutoIt

  • MasterCode

    • Bitnugger
    • 24. September 2018 um 17:25
    Zitat von Musashi

    Ich erhalte beim 'Build' : error: _WinAPI_GetMonitorInfo(): undefined function

    Bis AutoIt 3.3.14.2 ist die Funktion _WinAPI_GetMonitorInfo in WinAPISys.au3 zu finden, ab AutoIt 3.3.14.3 wurde sie nach WinAPIGdi.au3 verschoben.

    Es sollte also reichen, wenn du folgende Zeile in dem Script hinzufügst:

    #include <WinAPISys.au3>

  • Win 10 SSD 128 GB auf SSD 500 GB umziehen und kläglich gescheitert [gelöst]

    • Bitnugger
    • 24. September 2018 um 00:07

    Mit ATI kannst du aber auch ein Sector-By-Sector Backup (bzw. Image) erstellen, dass auch die leeren (unformatierten) Bereiche der Festplatte sichert.

    https://kb.acronis.com/content/1543

  • Win 10 SSD 128 GB auf SSD 500 GB umziehen und kläglich gescheitert [gelöst]

    • Bitnugger
    • 23. September 2018 um 23:48
    Zitat von bazii

    ATI 2018 nimmt im Festpallten-Image die kleine unformatierte Partition nicht ins Image auf.

    Es gibt keine unformatierten Partitionen, nur unformatierte Bereiche und diese müssen nicht ins Image aufgenommen werden, denn relevant sind nur die Start- und Endpositionen der formatierten Partitionen, wodurch die - falls vorhanden - unformatierten Bereiche automatisch entstehen.

  • Win 10 SSD 128 GB auf SSD 500 GB umziehen und kläglich gescheitert [gelöst]

    • Bitnugger
    • 23. September 2018 um 22:35

    Noch eine Möglichkeit wäre, du wandelst zuvor (ohne Datenverlust) die MBR-Partitionen nach GPT um... dann kannst du das sicher auch mit Clonezilla machen.

    https://docs.microsoft.com/de-de/windows/…ment/mbr-to-gpt

  • FileOpenDialog zeigt Dateiname nicht vollständig an

    • Bitnugger
    • 23. September 2018 um 21:57
    Zitat von Oscar

    Ich hätte da noch eine Variante, bei der man keine zusätzliche Exe-Datei braucht.

    Sehr schön...

    Hier eine daraus abgewandelte Variante, die ich nun benutze:

    AutoIt: _FileOpenDialog.au3
    #include-once
    #include <Timers.au3>
    
    Global $g_sFileOpenDialogTitle
    
    Func _FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions = 0, $sDefaultName = '', $hWnd = 0)
        If StringLen($sDefaultName) > 14 Then ; Problem mit der Anzeige des DefaultName im FileOpenDialog fixen, dass ab 15 Zeichen auftritt
            $g_sFileOpenDialogTitle = $sTitle
            Local $hDummyGui = GUICreate('DummyGui'), $iIDTimer = _Timer_SetTimer($hDummyGui, 250, '_FileOpenCheck')
        EndIf
        Local $sWorkingDir = @WorkingDir, $sFile = FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWnd), $iError = @error, $iExtended = @extended
        FileChangeDir($sWorkingDir)
        If StringLen($sDefaultName) > 14 Then GUIDelete($hDummyGui)
    
        Return SetError($iError, $iExtended, $sFile)
    EndFunc   ;==>_FileOpenDialog
    
    Func _FileOpenCheck($hWnd, $iMsg, $iIDTimer, $iTime)
        _Timer_KillTimer($hWnd, $iIDTimer)
        If WinWait($g_sFileOpenDialogTitle, '', 3) Then ControlSend($g_sFileOpenDialogTitle, '', '[CLASS:Edit; INSTANCE:1]', '{HOME}^a')
    EndFunc   ;==>_FileOpenCheck
    Alles anzeigen
    AutoIt: _FileOpenDialog_Example.au3
    #include-once
    #include <_FileOpenDialog.au3>
    
    Local $sFile = _FileOpenDialog('Select File...', 'C:', 'All (*.*)', 0, 'Dateiname 1234567890')
    MsgBox(64, @ScriptName, '$sFile = ' & $sFile)
  • Win 10 SSD 128 GB auf SSD 500 GB umziehen und kläglich gescheitert [gelöst]

    • Bitnugger
    • 23. September 2018 um 17:53
    Zitat von bazii

    Oder kennt von Euch jemand ein kostenloses Tool, welches die Festplatte als Clone in ein Image schreiben kann?

    Wie wäre es hiermit?

    https://www.backup-utility.com/de/features/fe…-erstellen.html

    Oder hiermit...

    https://www.clonezilla.org/

  • FileOpenDialog zeigt Dateiname nicht vollständig an

    • Bitnugger
    • 23. September 2018 um 17:44

    Habe mir da einen kleinen Fix für geschrieben...

    AutoIt
    ; Dieses Script kompilieren und als '_FixFileOpenDialog.exe' speichern.
    
    If $CMDLINE[0] = 2 Then _FixFileOpenDialog($CMDLINE[1], $CMDLINE[2])
    
    Func _FixFileOpenDialog($sTitle, $sName)
        Local $hWnd = WinWait($sTitle, '', 3)
        If IsHWnd($hWnd) Then
            Local $hCtrl = ControlGetHandle($hWnd, $sName, '')
            If IsHWnd($hCtrl) Then
                ControlSetText($hCtrl, '', '', $sName)
                Send('^a')
            EndIf
        EndIf
    EndFunc
    Alles anzeigen
    AutoIt
    ; Anstelle von FileOpenDialog nun _FixedFileOpenDialog benutzen
    
    Global Const $g_sFixFileOpenDialog = @ScriptDir & '\_FixFileOpenDialog.exe'
    
    Local $sFile = _FixedFileOpenDialog('Select File...', 'C:', 'All (*.*)', 0, 'Dateiname 1234567890')
    MsgBox(64, @ScriptName, '$sFile = ' & $sFile)
    
    Func _FixedFileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions = 0 , $sDefaultName = '', $hWnd = '')
        If StringLen($sDefaultName) > 14 Then Run(StringFormat('"%s" "%s" "%s"', $g_sFixFileOpenDialog, $sTitle, $sDefaultName)) ; Problem mit der Anzeige fixen, dass ab 15 Zeichen auftritt
        Local $sFile = FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName)
        Return SetError(@error, @extended, $sFile)
    EndFunc
    Alles anzeigen
  • Win 10 SSD 128 GB auf SSD 500 GB umziehen und kläglich gescheitert [gelöst]

    • Bitnugger
    • 23. September 2018 um 16:17

    Schau mal hier, ob dir das weiterhilft...

  • Was hat es mit $IDCLOSE in der MsgBoxConstants.au3 auf sich?

    • Bitnugger
    • 23. September 2018 um 11:37

    Ich verstehe die Frage nicht... bzw. es steht doch in den Includes, was es damit auf sich hat.

    AutoIt
    Global Const $IDCLOSE = 8 ; Close button was selected
  • FileOpenDialog zeigt Dateiname nicht vollständig an

    • Bitnugger
    • 23. September 2018 um 08:22
    Zitat von Tweaky

    Ist das ein Bug?

    Ja, das ist ein Bug. Bei mir (Windows 7/10 Pro) ist es auch nicht anders... ab 15 Zeichen wird vorne eines weggeschnitten... bis "Dateiname 1234" geht also korrekt.

    Dateiname 1234567890.png

    Dateiname 12345.png

    Dateiname 1234.png

    Dateiname 1234567890_WIN_7.png

    Zitat von autoiter

    Wie meinst du das? Wie gibst du der Funktion einen Dateinamen mit?

    AutoIt
    Local $sFile = FileOpenDialog('Select File...', 'C:', 'All (*.*)', 0, 'Dateiname 1234567890')
  • Zeilen tauschen und hinzufügen

    • Bitnugger
    • 22. September 2018 um 22:06
    Zitat von AutoMit

    Welchen Debugger gibt es in der "nicht Standardinstallation" ?

    AU3Check - bzw. Au3Check.exe, bei der installierten Version normal zu finden in: C:\Program Files (x86)\AutoIt3\

    Ein echter Debugger ist das aber nicht... wie der Name schon sagt, ein Programm, dass das Script vorab auf Syntaxfehler prüft...

    "nicht Standardinstallation" ...die Default-Installation würde ich eher als Minimal-Installation bezeichnen... und mit SciTE4AutoIt3 als erweiterte Installation.

  • Problem mit WinGetState

    • Bitnugger
    • 22. September 2018 um 21:22
    Zitat von Michi91

    Funktionierts denn bei Euch korrekt?

    Ja, allerdings nicht so, wie du es dir vorstellst.

    Zitat von Michi91

    Genau wie bei WinList werden auch hier minimierte, unsichtbare und sonstige Fenster angezeigt, von denen kein Schwein ne Ahnung hat wo sie her kommen.

    Nein, denn die filterst du doch mit WinGetState aus... allerdings bleiben dann noch einige über, die dich nicht interessieren... die sind dann auch sichtbar und nicht minimiert... das Script macht also genau das, was es soll... nur nicht, genau das, was du willst... die unerwünschten Fenster könntest du evtl. über den Namen des Prozesses bzw. des Parent-Prozesses und des ProzessesUsers herausfiltern. Eine andere Lösung fällt mit mom. auch nicht ein.

    Hier mal ein Beispiel:

    AutoIt
    #include <WinAPISysWin.au3>
    #include <WinAPIProc.au3>
    
    Local $iParent, $iPID, $sParentName, $sProcessName, $aProcessUser, $iState, $Count = 0, $List = _WinAPI_EnumWindowsTop()
    
    ConsoleWrite(StringFormat('> %10s %-72s %-32s %-32s %s\n', 'HWnd', 'ClassName', 'ProcessName', 'ParentName', 'ProcessUser'))
    For $i = 1 To $List[0][0]
        $iState = WinGetState($List[$i][0])
        If BitAND($iState, 18) = 2 Then
            $iPID = WinGetProcess($List[$i][0])
            $iParent = _WinAPI_GetParentProcess($iPID)
            $sParentName = _WinAPI_GetProcessName($iParent)
            $sProcessName = _WinAPI_GetProcessName($iPID)
            $aProcessUser = _WinAPI_GetProcessUser($iPID)
    
            If $sParentName = 'explorer.exe' Or $sParentName = 'Nexus-Ultimate.exe' Or $sParentName = 'svchost.exe' Then ContinueLoop
            If $aProcessUser[0] <> @UserName Then ContinueLoop
    
            ConsoleWrite(StringFormat('- %10s %-72s %-32s %-32s %s\n', $List[$i][0], $List[$i][1], $sProcessName, $sParentName, $aProcessUser[0]))
    
            $Count = $Count + 1
        EndIf
    Next
    
    MsgBox(0, "", $Count)
    Alles anzeigen
  • Problem mit WinGetState

    • Bitnugger
    • 22. September 2018 um 20:29
    Zitat von autoBert

    $List = WinList

    Wofür soll diese Zeile denn gut sein?8o

    Mit $List[$i][0] <> "" prüfst du ja lediglich, ob das Fenster einen Titel hat... dass muss es aber nicht, um sichtbar zu sein... ich verstehe deshalb nicht, wieso du die ohne Titel ausfilterst... ich denke, er sucht wohl eher die Funktion _WinAPI_EnumWindowsTop.

    AutoIt
    #include <WinAPISysWin.au3>
    
    Local $iState, $Count = 0, $List = _WinAPI_EnumWindowsTop()
    
    For $i = 1 To $List[0][0]
        $iState = WinGetState($List[$i][0])
        If BitAND($iState, 2) Then
            $Count = $Count + 1
        EndIf
    Next
    
    MsgBox(0, "", $Count)
    Alles anzeigen
  • Zeilen tauschen und hinzufügen

    • Bitnugger
    • 21. September 2018 um 21:55
    Zitat von autoiter

    Innerhalb der Schleife prüfst du bei jedem Durchlauf

    Arrrg... ja, stimmt, du hast Recht. 8o

  • Zeilen tauschen und hinzufügen

    • Bitnugger
    • 21. September 2018 um 20:40
    Zitat von Andy

    Wieso Array? Ich dachte es geht um einen Text?!

    Komplette Datei einlesen, die beiden Zeilen mit den entsprechenden "Anfängen" finden, tauschen und (mit der 3.Zeile ergänzt) stringreplacen.

    Das geht natürlich auch... :rofl:

    AutoIt
    Local $sFile = _
        '# 2 beliebiger Text' & @CRLF & _
        '# 1 juhu ein Sandkorn' & @CRLF & _
        '... viele Zeilen' & @CRLF & _
        '# 2 beliebiger Text' & @CRLF & _
        '# 1 juhu ein Korn' & @CRLF & _
        '... viele Zeilen' & @CRLF
    ConsoleWrite('> vorher: ' & @CRLF & $sFile & @CRLF)
    $sFile = StringRegExpReplace($sFile, '(# 2.+\R)(# 1)(.+\R)', '\2\3\1\# 3\3')
    ConsoleWrite('! nachher: ' & @CRLF & $sFile & @CRLF)
  • Zeilen tauschen und hinzufügen

    • Bitnugger
    • 21. September 2018 um 19:50
    Zitat von autoiter

    Das stimmt nur für die Zeile For $i = 0 To UBound($aFile) -1 Step 1 (auch wenn ich das Step 1 weglassen würde.

    Ja, sicher... genau davon reden wir doch... und ja, Step 1 kann man weglassen, weil es Default ist... und was innerhalb der Schleife passiert, ist wieder eine völlig andere Sache!

    Die in deinem Test-Script ermittelten Zeiten machen keinen Sinn, wenn der Code innerhalb der beiden Schleifen unterschiedlich ist... in der ersten For...Next prüfst bei jedem Durchgang UBound... das kostet zusätzliche Zeit... und ja, je größer das Array, umso länger braucht UBound, um die Anzahl der Zeilen im Array zu ermitteln - aber... entweder ist es ein Array mit fixer Größe, oder an irgendeiner Stelle muss die Anzahl der Zeilen im Array mit UBound ermitteln werden... und dann ist es egal, wo dies getan wird.

    Fehlt da nicht noch was? ;)

    If 999 Then

  • Zeilen tauschen und hinzufügen

    • Bitnugger
    • 21. September 2018 um 19:09
    Zitat von autoiter

    Jedoch sollte Ubound nicht in einer Schleife aufgerufen werden. Das kostet unnötig Zeit (abhängig von der Anzahl der Zeilen).

    Nope... denn der Wert für UBound wird nur einmalig ermittelt... egal wie viele Zeilen das Array hat - leicht nachvollziehbar daran, dass die letzten drei Zeilen, die mit _ArrayAdd beim ersten Durchlauf hinzugefügt werden, nicht sortiert werden!

    AutoIt
    #include <Array.au3>
    
    Local $aFile = [ _
        '# 2 beliebiger Text', _
        '# 1 juhu ein Sandkorn', _
        '... viele Zeilen', _
        '# 2 beliebiger Text', _
        '# 1 juhu ein Korn', _
        '... viele Zeilen']
    
    For $i = 0 To UBound($aFile) -1 Step 1
        If $i = 0 Then
            _ArrayAdd($aFile, '# 2 beliebiger Text + _ArrayAdd')
            _ArrayAdd($aFile, '# 1 juhu ein Korn + _ArrayAdd')
            _ArrayAdd($aFile, '... viele Zeilen + _ArrayAdd')
        EndIf
    
        If $i < UBound($aFile) -1 And StringLeft($aFile[$i], 3) = '# 2' And StringLeft($aFile[$i + 1], 3) = '# 1' Then
            _ArraySwap($aFile, $i, $i + 1)
            _ArrayInsert($aFile, $i + 2, '# 3' & StringMid($aFile[$i], 4))
        EndIf
    Next
    
    _ArrayDisplay($aFile, '$aFile')
    Alles anzeigen
    Zitat von autoiter

    Außerdem meine ich, die Prüfung in der Schleife ist gar nicht notwendig. Stattdessen sollte es auch so funktionieren:

    Sicher funktioniert das auch ohne Prüfung... das kann aber dazu führen, dass das Script abstürzt, wenn die Datei fehlerhaft ist.

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™