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

Beiträge von Velted

  • Datenbank : Teil 1 erstellen einer DB

    • Velted
    • 30. September 2025 um 16:35

    Moin BugFix ,

    wie kommst Du zu der Behauptung, ich sei ein 'Forist'? Ich verwahre mich gegen diese vollkommen realitätsferne Unterstellung. ;)

    Mach mal halblang, Velted

    Ansonsten sollte vielleicht ein Moderator den letzten Teil dieses Beitrags unter dem Titel "Wer braucht wofür Datenbanken?" nach Talk verlagern.

  • Datenbank : Teil 1 erstellen einer DB

    • Velted
    • 30. September 2025 um 11:17

    Moin Peter S. Taler ,

    es gibt Leute, die sich als Prügelknaben anbieten, weil ihnen das im Gegenzug die Möglichkeit bietet, lauthals über die Ungerechtigkeit der Mitmenschen und der Welt an sich zu lamentieren. Wenn ich mir Deine Argumente anschaue, entsteht bei mir der Eindruck, dass Du einer von diesen Leuten sein könntest.

    Zitat von Peter S. Taler

    ... mir ist klar, für die folgenden Zeilen beziehe ich wieder mal Prügel...egal.

    ist ein deutlicher Wink mit dem "Zaunpfahl", dass Du nicht an einer sachlichen Auseinandersetzung interessiert bist. Allen hier Beteiligten ist klar, dass eine Datenbank für die Lösung der bisher bekannten Aufgabenstellung nicht notwendig ist. Alina will aber genau diese Lösung ausprobieren. Weshalb also Deine Einwände?

    Und: 10.000 Datensätze mit 10 Feldern sind für aktuelle Rechner normalerweise eine 'winzige' Datenmenge. Ich hätte angenommen, dass Du das weißt.

  • Datenbank : Teil 1 erstellen einer DB

    • Velted
    • 29. September 2025 um 12:27

    Moin Peter S. Taler,

    die Anderen haben anscheinend keine Lust auf eine Prügelei, ich eigentlich auch nicht, aber ich bin heute mit richtig schlechter Laune aufgewacht und nehme Dein Angebot deshalb gern an.

    Wenn Alina eine Datenbank benutzen will, so lass ihr doch ihren Willen. Du hast sicher Recht, wenn Du sagst, dass man einfach strukturierte Textdaten mit ein paar Hundert Sätzen mit jeweils ein paar Zig Feldern auf aktuellen Rechnern auch mit einer normalen Datei bearbeiten kann. Dein _FileReadToArray() versagt aber schon dann, wenn Du das Delimiterzeichen auch in Feldinhalten benötigst. Mehrzeilige Feldinhalte sind nur mit einigem Aufwand realisierbar und binäre Feldinhalte bleiben auch 'außen vor'.

    Wenn die Dateien größer werden ist _FileReadToArray() auch nur bedingt das Mittel der Wahl. Intern werden dabei für den gesamten Inhalt der Datei zwei Arrays erstellt. Das kann dauern und unnütz viel Speicher kosten (Ich weiß, Speicher kostet nichts!).

    Wenn Du für Deine Datenbank ein schlichtes 'lokales' DB-System wie SQLite verwendest, beschränkt sich der Aufwand auf das Einlesen in die UDF und die SQL-Syntax. Man kann das schaffen.

    Solange Du mit Deinen Dateien glücklich bist, nutze sie. Was Alina macht, sollte aber ihr überlassen bleiben.

    Grüße, Velted

  • Datumsformat

    • Velted
    • 25. September 2025 um 09:58

    Fast vergessen: Die AM/PM Zeit entspricht der Anzeige einer analogen 12-stündigen Uhr. Es gibt zweimal am Tag 12 Uhr. Die 12 der ersten Tageshälfte (AM) ist 0 Uhr.

  • Datumsformat

    • Velted
    • 25. September 2025 um 09:42

    Moin,

    ich denke, dass das hier die allgemeine Auffassung in englischspracigen Ländern darstellt:

    AM und PM – Bedeutung

    ... wenn die 59. Minute der 11. Stunde abgelaufen ist, beginnt die zweite Tageshälfte um 12 Uhr

    ... wenn die 59. Minute der 23. Stunde abgelaufen ist, beginnt der neue Tag mit 0 Uhr

  • Dateipfad mit Makronamen besetzen

    • Velted
    • 26. Juli 2025 um 10:53

    Noch eine Idee: Vielleicht kannst Du ja (zumindest für Teile)

    AutoIt
    #include <WinAPIShPath.au3>
    _WinAPI_PathUnExpandEnvStrings ( $sFilePath )

    nutzen?

  • Dateipfad mit Makronamen besetzen

    • Velted
    • 26. Juli 2025 um 10:39

    Moin,

    kannst Du Dir als Alternative vorstellen, die Daten auf allen Rechnern in einem festen neutralen Verzeichnis zur Verfügung zu stellen?

    Ansonsten würde aus C:\users\bugfix wohl eher @UserProfileDir werden.

  • GUIRegisterMsg($WM_DRAWITEM, ...) Problem mit Map

    • Velted
    • 5. März 2025 um 10:07

    Moin, die Ursache der Abbrüche ist wahrscheinlich:

    DRAWITEMSTRUCT

    Zitat

    itemID

    Type: UINT

    The menu item identifier for a menu item or the index of the item in a list box or combo box. For an empty list box or combo box, this member can be -1. This allows the application to draw only the focus rectangle at the coordinates specified by the rcItem member even though there are no items in the control. This indicates to the user whether the list box or combo box has the focus. How the bits are set in the itemAction member determines whether the rectangle is to be drawn as though the list box or combo box has the focus.

    Weil das Strukturfeld auch im Skript als UInt definiert ist, kommt als Wert 4294967295 an. Für diesen 'Index' kann man die _WM_DRAWITEM Funktion sofort verlassen.

  • Listview mit Icon - Item untereinander anzeigen

    • Velted
    • 9. Februar 2025 um 12:12

    Moin,

    das ursprüngliche Problem entsteht durch die verwendeten Stile.

    $LVS_ICON0x0000This style specifies icon view.
    $LVS_REPORT0x0001This style specifies report view.
    $LVS_SMALLICON0x0002This style specifies small icon view.
    $LVS_LIST0x0003

    Mit der UDF-Funktion wird der Stil $LVS_SMALLICON (2) direkt übernommen.

    Die GUICtrl-Funktion 'erzwingt' zusätzlich den Stil $LVS_REPORT (1). Beide verschmelzen dann zu $LVS_LIST (3), und das ist anscheinend genau der Stil, den Du haben willst.

  • Aufruf des Eventviewers funktioniert nicht mehr

    • Velted
    • 13. Januar 2025 um 11:43

    OffTopic:

    Peter S. Taler,

    weil mich das schon länger irritiert:

    Ab 19-10-22 ergänzt um:
    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    falschzitate.blogspot.com

  • Aufruf des Eventviewers funktioniert nicht mehr

    • Velted
    • 9. Januar 2025 um 07:46

    Moin Peter S. Taler,

    Zitat von BananaJoe

    ... eine DB habe ich genauso schnell aufgesetzt ...

    Das wird auch nicht auf die Zehntelsekunde stimmen, aber schau mal da: Command Line Shell For SQLite

    Es dauert zumindest nicht viel länger.

  • AutoIt Skript 32bit oder 64bit

    • Velted
    • 5. Januar 2025 um 10:01

    Moin,

    wenn eine 32-Bit-Anwendung auf einem 64-Bit-Windows laufen soll, stellt das System dieser Anwendung eine spezielle 32-Bit-Umgebung zur Verfügung. Das nennt sich WOW (Windows on Windows). Dabei kann natürlich immer mal etwas schief laufen. Ich würde deshalb prinzipiell auf einem 64-Bit-System AutoIt64 benutzen, soweit es möglich ist.

    Es gibt allerdings einige Kommunikationsprobleme zwischen 32- und 64-Bit-Anwendungen. Wenn man 32-Bit-Anwendungen nutzt, die man mit AutoIt steuern will, kann das mit AutoIt32 leichter sein.

  • Icon extrahieren - Skript läuft nicht

    • Velted
    • 4. Januar 2025 um 17:34
    C
    #Region    ;************ Includes ************
    #include <Array.au3>
    #include <WinAPIRes.au3>
    #EndRegion ;************ Includes ************
    ; ~#AutoIt3Wrapper_UseX64=Y
    MsgBox(0, "", "Is64-Bit: " & @AutoItX64)
    Global $aINM, $LV, $LHT, $IHM
    $IconFile = @ScriptDir & "\Extracted.ico"
    FileDelete($IconFile)
    _ExtractIconToFile(@SystemDir & "\shell32.dll", -42, $IconFile)
    If Not FileExists($IconFile) Then MsgBox(0, 0, "Datei wurde nicht gespeichert")
    
    ; #FUNCTION# =============================================================================================
    ; Name...........: _ExtractIconToFile
    ; Description ...: Extract an icon resource from a cpl, dll, exe, icl, ocx to a *.ico file
    ; Syntax.........: _ExtractIconToFile($sInFile, $iIcon, $sOutIco[, $iPath = 0])
    ; Parameters ....: $sInFile - Path to file that contains the icon to extract.
    ;                  $iIcon   - Icon Number to extract, eg; -1 (The first icon starts at -1)
    ;                  $sOutIco - Full path where to save the extracted icon to, eg; "C:\My Icons\new.ico"
    ;                  $iPath   - If set to 1 then the extraction path will be created if it doesn't exist.
    ;                             If left as 0 then if the extraction path doesn't exist it won't be created.
    ; Return values .: Success  - Return 1 and @error 0
    ;                  Failure  - Return 0 and @error 1 ~ 12
    ;                             @error 1 = Invalid $sInFile parameter
    ;                             @error 2 = Invalid $iIcon parameter
    ;                             @error 3 = LoadLibrary failed to return a valid ptr
    ;                             @error 4 = $iIcon does not exist in the $sInFile
    ;                             @error 5 = Failed to Find RT_GROUP_ICON Resource
    ;                             @error 6 = Returned RT_GROUP_ICON Resource as 0 bytes
    ;                             @error 7 = Failed to Load RT_GROUP_ICON Resource
    ;                             @error 8 = Failed to Lock RT_GROUP_ICON Resource
    ;                             @error 9 = Failed to create DLL Struct for RT_GROUP_ICON data
    ;                             @error 10 = Data in DLL Struct is null
    ;                             @error 11 = Failed to Open output file path
    ;                             @error 12 = Failed to write file at output path
    ;                             (Most the error returns were for my own debug purpose)
    ; Author ........: smashly
    ; Modified.......:
    ; Remarks .......: A big Thank You to Siao for the heads up on _ResourceEnumNames & ___EnumResNameProc
    ;                  Also Thank You to WeaponX for his _StringSplitRegExp
    ; Related .......:
    ; Link ..........;
    ; Example .......; _ExtractIconToFile(@SystemDir & "\shell32.dll", -42, @HomeDrive & "\Extracted.ico")
    ; ========================================================================================================
    Func _ExtractIconToFile($sInFile, $iIcon, $sOutIco, $iPath = 0)
    	Local $hInstance, $iGN = "", $hResource, $iSize, $hData, $pData, $tRes, $sDByte
    	Local $sData, $sHdr, $iOrd, $aHtail, $iCnt, $Offset, $FO, $iCrt = 18
    
    	If $iPath = 1 Then $iCrt = 26
    	If Not FileExists($sInFile) Then Return SetError(1, 0, 0)
    	If Not IsInt($iIcon) Then Return SetError(2, 0, 0)
    
    	$hInstance = _WinAPI_LoadLibraryEx($sInFile, $LOAD_LIBRARY_AS_DATAFILE)
    
    	If Not IsPtr($hInstance) Then Return SetError(3, 0, 0)
    	$aINM = _WinAPI_EnumResourceNames($hInstance, $RT_GROUP_ICON)
    
    	For $i = 1 To $aINM[0]
    		If $i = StringReplace($iIcon, "-", "") Then
    			$iGN = $aINM[$i]
    			ExitLoop
    		EndIf
    	Next
    	If $iGN = "" Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(4, 0, 0)
    	EndIf
    	$hResource = _WinAPI_FindResource($hInstance, $RT_GROUP_ICON, $iGN)
    	If $hResource = 0 Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(5, 0, 0)
    	EndIf
    	$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
    	If $iSize = 0 Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(6, 0, 0)
    	EndIf
    	$hData = _WinAPI_LoadResource($hInstance, $hResource)
    	If $hData = 0 Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(7, 0, 0)
    	EndIf
    	$pData = _WinAPI_LockResource($hData)
    	If $pData = 0 Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(8, 0, 0)
    	EndIf
    	$tRes = DllStructCreate("byte[" & $iSize & "]", $pData)
    	If Not IsDllStruct($tRes) Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(9, 0, 0)
    	EndIf
    	$sData = DllStructGetData($tRes, 1)
    	If $sData = "" Then
    		_WinAPI_FreeLibrary($hInstance)
    		Return SetError(10, 0, 0)
    	EndIf
    
    	$sHdr = StringLeft($sData, 14)
    	$iOrd = Dec(LTHR("0x" & StringRight(StringLeft($sData, 42), 4))) ;index start of icon in the library
    	$aHtail = _StringSplitRegExp(StringTrimLeft($sData, 14), '(.){28}', True)
    	$iCnt = $aHtail[0]
    	$Offset = ($iCnt * 16) + 6
    	For $r = 1 To $aHtail[0]
    		$sDByte = Dec(Hex(BitRotate("0x" & StringLeft(StringRight($aHtail[$r], 12), 4), -8), 4))
    		$aHtail[$r] = StringTrimRight($aHtail[$r], 4)
    		$sHdr &= $aHtail[$r] & LTHR($Offset) & "0000"
    		$Offset += $sDByte
    	Next
    	For $i = 1 To $iCnt
    		$hResource = _WinAPI_FindResource($hInstance, $RT_ICON, $iOrd)
    		$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
    		$hData = _WinAPI_LoadResource($hInstance, $hResource)
    		$pData = _WinAPI_LockResource($hData)
    		$tRes = DllStructCreate("byte[" & $iSize & "]", $pData)
    		$sHdr &= StringTrimLeft(DllStructGetData($tRes, 1), 2)
    		$iOrd += 1
    	Next
    	_WinAPI_FreeLibrary($hInstance)
    	Dim $aINM[1]
    	$FO = FileOpen($sOutIco, $iCrt)
    	If $FO = -1 Then Return SetError(11, 0, 0)
    	$FW = FileWrite($FO, $sHdr)
    	If $FW = 0 Then Return SetError(12, 0, 0)
    	FileClose($FO)
    	Return SetError(0, 0, 1)
    EndFunc   ;==>_ExtractIconToFile
    
    ; Helper Functions beyond this point
    
    Func LTHR($sNum)
    	Return Hex(BitRotate($sNum, -8), 4)
    EndFunc   ;==>LTHR
    
    Func _StringSplitRegExp($sString, $sPattern, $sIncludeMatch = False, $iCount = 0)
    	Local $sReservedPattern = Chr(0), $sTemp, $aResult
    	Local $sReplacePattern = $sReservedPattern
    	If $sIncludeMatch Then $sReplacePattern = "$0" & $sReplacePattern
    	$sTemp = StringRegExpReplace($sString, $sPattern, $sReplacePattern, $iCount)
    	If StringRight($sTemp, 1) = $sReservedPattern Then $sTemp = StringTrimRight($sTemp, 1)
    	$aResult = StringSplit($sTemp, $sReservedPattern, 1)
    	Return $aResult
    EndFunc   ;==>_StringSplitRegExp
    
    Func _ResourceEnumNames($hModule, $iType)
    	Local $aRet, $IsPtr = IsPtr($hModule), $xCB
    	If $IsPtr Then
    		$xCB = DllCallbackRegister('___EnumResNameProc', 'int', 'int*;int*;int*;int*')
    		$aRet = DllCall('kernel32.dll', 'int', 'EnumResourceNamesW', 'ptr', $hModule, 'int', $iType, 'ptr', DllCallbackGetPtr($xCB), 'ptr', 0) ;Absturz bei 64bit!!!
    		DllCallbackFree($xCB)
    	EndIf
    EndFunc   ;==>_ResourceEnumNames
    
    Func ___EnumResNameProc($hModule, $pType, $pName, $lParam)
    	Local $iSize = DllCall('kernel32.dll', 'int', 'GlobalSize', 'ptr', $pName), $tBuf
    	If $iSize Then
    		$tBuf = DllStructCreate('wchar[' & $iSize & ']', $pName)
    		ReDim $aINM[UBound($aINM) + 1]
    		$aINM[0] += 1
    		$aINM[UBound($aINM) - 1] = DllStructGetData($tBuf, 1)
    	Else
    		ReDim $aINM[UBound($aINM) + 1]
    		$aINM[0] += 1
    		$aINM[UBound($aINM) - 1] = "#" & $pName
    	EndIf
    	Return 1
    EndFunc   ;==>___EnumResNameProc
    Alles anzeigen

    Das klappt! ;) (Win 10)

  • Icon extrahieren - Skript läuft nicht

    • Velted
    • 4. Januar 2025 um 17:11

    Moin,

    die Funktion _ResourceEnumNames gibt es auch in einer _Winapi_-Version: _WinAPI_EnumResourceNames in #include <WinAPIRes.au3>.
    Damit sollte es zuverlässiger laufen.

  • au3-Datei Doppelklick - mit SciTE ausführen

    • Velted
    • 2. Januar 2025 um 12:20

    Moin,
    wenn Du in SciTE F5 (Go) drückst, wird Folgendes aufgerufen:

    Code: au3.properties
    # Commands to compile / run your script
    command.go.$(au3)="$(SciteDefaultHome)\..\AutoIt3.exe" "$(SciteDefaultHome)\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "$(FilePath)" /UserParams $(1) $(2) $(3) $(4)

    Auf meinem Rechner entspricht das:

    Code
    "C:\Program Files (x86)\AutoIt3\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "%1"

    Wenn Du das in der Registrierung unter HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Open\Command ablegst, sollte bei Doppelklick der AutoIt3Wrapper die Ausführung gemäß der im Skript gefundenen Direktiven anstoßen.

    Alternativ kannst Du das auch beim Run Schlüssel ablegen. Du musst das Skript dann aber über das Kontextmenü starten.

    Ich habe das nicht probiert, weil ich bei Doppelklick das Script in SciTE anzeigen lasse.

  • Kontextmenü - Absturz

    • Velted
    • 1. Januar 2025 um 16:59

    Yepp!

    Der dritte Parameter hat den Windows-Typ wParam. wParam hat ptr Größe. Er hat nur in 32-Bit Umgebungen dieselbe Größe wie long (4 Bytes). In 64-Bit Umgebungen sind es 8 Bytes.

    DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;ptr;ptr") funktioniert auch, beschreibt die Parameter aber nicht so konkret.

  • _WinAPI_ShellChangeNotifyRegister 64bit - Absturz

    • Velted
    • 1. Januar 2025 um 13:48

    Hallo Oscar ,

    das ist eine von den 'Shell-Ausrichtungsfallen'. Die Struktur SHChangeNotifyEntry ist in ShlObj_core.h definiert. Da steht am Anfang ein
    #include <pshpack1.h>   /* Assume byte packing throughout */,
    das auch für die Struktur gilt und ein 'Byte-Packing' erzwingt.

    Deshalb:

    Code
    Func _WinAPI_ShellChangeNotifyRegister64($hWnd, $iMsg, $iEvents, $iSources, $aPaths, $bRecursive = False)
        Local $iPath = $aPaths, $tagStruct = 'align 1;' ; <<<<<<<<<<
  • _WinAPI_ShellChangeNotifyRegister 64bit - Absturz

    • Velted
    • 1. Januar 2025 um 12:40

    Moin,

    frohes neues Jahr! Hoffen wir mal, dass sich der Temperaturanstieg in 2025 gegenüber 2023 und 2024 wieder umkehrt und weniger Flächen überflutet werden.

    Zum Thema:

    Code
    For $i = 0 To UBound($aPaths) - 1
    		$aPaths[$i] = _WinAPI_ShellILCreateFromPath(_WinAPI_PathSearchAndQualify($aPaths[$i]))
    		DllStructSetData($tEntry, (@AutoItX64 ? 4 : 2) * $i + 1, $aPaths[$i]) ; bei 64Bit ist PIDLIST_ABSOLUTE = 64 Bit (4 Byte)
    		DllStructSetData($tEntry, (@AutoItX64 ? 4 : 2) * $i + 2, $bRecursive)
    Next

    Ich denke, dass sich der Feldindex (@AutoItX64 ? 4 : 2) * $i + 1 von 32- zu 64-Bit nicht ändert.

  • Ordner mit laufender Nummer

    • Velted
    • 9. Dezember 2024 um 10:46

    Moin Moombas,

    Zitat von Moombas

    Zunächst einmal machst du auch eine doppelte Erstellung einer Variable (Zeile 5 und 8). Zeile in Zeile 5 auf 0 setzen, Zeile 8 weg lassen.

    Wenn man das macht, wird die jeweils erste Datei mit 0 geschrieben. Ich glaube nicht, dass das sein soll.

    Zitat von Moombas

    Dann bedenke bitte, wenn dies dein komplettes Skript ist, das "Local" hier die falsche Wahl ist, sondern "Global" genutzt werden muss, ...

    "muss" ist falsch, weil "Lokale" Variable im "global scope" automatisch "Global" sind. Es schafft allerdings Klarheit.

  • Ordner mit laufender Nummer

    • Velted
    • 9. Dezember 2024 um 10:28

    Moin,

    weil Du Dich noch in einem frühen Stadium befindest möchte ich Folgendes anmerken:

    P202400001
    Solltest Du vorhaben, das Jahr in die Nummer aufzunehmen, wäre das 'doppelt gemoppelt', weil das Jahr ja schon im Datum steht ($sDatum = (@YEAR & "-" & @MON & "-" & @MDAY)). Außerdem musst Du dann bedenken, dass Du die laufende Nummer beim ersten Start in 2025 wieder auf 1 setzen musst.

    Wofür brauchst Du diese Nummer überhaupt?

    Grüße, Velted

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™