Vielen Dank für die guten Wünsche!
Heute wurde/wird nicht viel gefeiert. Die Feier ist erst am Wochenende. ![]()
Vielen Dank für die guten Wünsche!
Heute wurde/wird nicht viel gefeiert. Die Feier ist erst am Wochenende. ![]()
Dafür hatte ich mir mal eine UDF archiviert: _ArrayNaturalSort.au3 (siehe Anhang)
Hier ein Beispiel:
#include "_ArrayNaturalSort.au3"
Global $aIPs[5] = ["127.0.0.1", "196.168.21.101", "196.168.20.101", "196.168.201.102", "89.123.34.123"]
_ArrayNaturalSort($aIPs)
_ArrayDisplay($aIPs)
1. Zahl:
[autoit]
$sNumber = '0001'
If Not StringRegExp($sNumber, '\A\d{4}\Z') Then MsgBox(0, 'Test1', 'falsche Zahl')
2. Zahl:
[autoit]
$sNumber = '0.1234567890123'
If Not StringRegExp($sNumber, '\A0\.\d{13}\Z') Then MsgBox(0, 'Test2', 'falsche Zahl')
[verschoben nach "Andere Programmiersprachen"]
Der Denkfehler besteht darin, dass meine "Datenbank" nie für einen Mehrbenutzerzugriff gedacht war. ![]()
Im Ernst: Da musst Du Vorkehrungen treffen, damit die Speicherfunktion nicht zeitgleich ausgeführt wird. Das kannst Du z.B. dadurch machen, dass Du vor dem Speichern das Dateiattribut "O = offline" bei der Datenbankdatei setzt und danach wieder löschst. Also die Savefunktion umschreiben: Prüfen, ob Attribut "O" gesetzt ist, wenn ja, dann so lange warten bis es nicht mehr gesetzt ist. Wenn es dann nicht mehr gesetzt ist, muss erst die Ladefunktion aufgerufen werden, um die neuen Daten des anderen Benutzers einzulesen. Das heißt aber, dass auch die Ladefunktion geändert werden muss, weil ja die Änderungen, die man selbst gerade gemacht hat, nicht überschrieben werden sollen.
Wozu als Datei speichern?
Es soll doch nur in der GUI angezeigt werden.
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
Local $hGUI, $hBMP, $hBitmap, $hGraphic
$hBMP = _ScreenCapture_Capture("", 0, 0, @DesktopWidth, @DesktopHeight)
; Create GUI
$hGUI = GUICreate("Screenshot", @DesktopWidth / 2, @DesktopHeight / 2)
GUISetState()
; Initialize GDI+ library
_GDIPlus_Startup()
; Draw bitmap to GUI
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, @DesktopWidth / 2, @DesktopHeight / 2)
; Clean up resources
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_BitmapDispose($hBitmap)
_WinAPI_DeleteObject($hBMP)
; Shut down GDI+ library
_GDIPlus_Shutdown()
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>_Main
Das ist so nicht möglich. Es gibt zwar den Befehl "Eval" mit dem man Variablen zusammensetzen kann, aber damit kann man nicht auf die Arraywerte zugreifen.
Also so:
Global $aList1[5] = [1, 2, 3, 4, 5]
Global $aList2[8] = [1, 2, 3, 4, 5, 6, 7, 8]
Global $aList3[12] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
For $i = 1 To 3
For $j = 0 To UBound(Eval('aList' & $i)) - 1
ConsoleWrite('innerer Schleifenwert = ' & $j & @CR) ; <- hier kann man mit Eval nicht auf den Arraywert zugreifen
Next
Next
Als Lösung würde ich ein 2D-Array verwenden:
[autoit]
Global $a2DList[3][12] = [[1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0], [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]
For $i = 0 To UBound($a2DList, 1) - 1
For $j = 0 To UBound($a2DList, 2) - 1
If $a2DList[$i][$j] <> 0 Then
ConsoleWrite($a2DList[$i][$j] & @CR)
EndIf
Next
Next
Versuchs mal so:
[autoit]$run = Run(FileGetShortName(@ScriptDir & "\FileManager\Uploader32.exe"), @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
[/autoit]
Vielleicht stören die Leerzeichen?!
Ich wünsche euch allen auch ein Frohes Weihnachtsfest. Werde wohl erst nach den Feiertagen wieder hier online sein.
Bis dahin: Macht es euch gemütlich und genießt die Tage. ![]()
Na gut, dann hier die anderen Funktionen:
#include <Array.au3>
$aCPU = _CI_GetCPU()
_ArrayDisplay($aCPU, 'Prozessor(en)')
$aRAM = _CI_GetRAM()
_ArrayDisplay($aRAM, 'Arbeitsspeicher')
Func _CI_GetCPU($strComputer = '.')
Local $aReturn[2][12] = [[ _
'Prozessor:', 'Name:', 'Beschreibung:', 'Sockel:', 'Taktfrequenz:', 'Ext. Taktfrequenz:', 'Spannung:', _
'Adress-Bitbreite:', 'Daten-Bitbreite:', 'Prozessor-ID:', '', '']]
Local $x = 0, $objWMIService, $colItems
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
$x += 1
ReDim $aReturn[$x + 1][12]
$aReturn[$x][0] = $objItem.DeviceID
$aReturn[$x][1] = $objItem.Name
$aReturn[$x][2] = $objItem.Description
$aReturn[$x][3] = $objItem.SocketDesignation
$aReturn[$x][4] = $objItem.CurrentClockSpeed & ' MHz (max. ' & $objItem.MaxClockSpeed & ' MHz)'
$aReturn[$x][5] = $objItem.ExtClock & ' MHz'
$aReturn[$x][6] = Round($objItem.CurrentVoltage / 10, 1) & ' V'
$aReturn[$x][7] = $objItem.AddressWidth & ' Bit'
$aReturn[$x][8] = $objItem.DataWidth & ' Bit'
$aReturn[$x][9] = $objItem.ProcessorId
Switch @OSVersion
Case 'WIN_VISTA', 'WIN_7'
$aReturn[0][10] = 'Prozessorkerne:'
$aReturn[0][11] = 'logische Prozessoren:'
$aReturn[$x][10] = $objItem.NumberOfCores
$aReturn[$x][11] = $objItem.NumberOfLogicalProcessors
EndSwitch
Next
EndIf
Return $aReturn
EndFunc ;==>_CI_GetCPU
Func _CI_GetRAM($strComputer = '.')
Local $aMemType[22] = ['Unbekannt', 'Anderes', 'DRAM', 'Sync DRAM', 'Cache DRAM', _
'EDO', 'EDRAM', 'VRAM', 'SRAM', 'RAM', 'ROM', _
'Flash', 'EEPROM', 'FEPROM', 'EPROM', 'CDRAM', '3DRAM', _
'SDRAM', 'SGRAM', 'RDRAM', 'DDR', 'DDR-2']
Local $aFormFactor[24] = ['Unbekannt', 'Andere', 'SIP', 'DIP', 'ZIP', 'SOJ', _
'Proprietär', 'SIMM', 'DIMM', 'TSOP', 'PGA', 'RIMM', _
'SODIMM', 'SRIMM', 'SMD', 'SSMP', 'QFP', 'TQFP', _
'SOIC', 'LCC', 'PLCC', 'BGA', 'FPBGA', 'LGA']
Local $aErrCorr[8] = ['Reserviert', 'Andere', 'Unbekannt', 'Keine', 'Parity', 'Single-bit ECC', 'Multi-bit ECC', 'CRC']
Local $aReturn[2][8] = [[ _
'Belegung:', 'Kapazität:', 'Daten-Bitbreite:', 'Steckplatz:', _
'Typ:', 'Format:', 'Fehlerkorrektur:', 'Bezeichnung:']]
Local $x = 0, $objWMIService, $colItems, $iMemDev, $iMaxCap, $iErrCorr
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PhysicalMemoryArray', 'WQL', 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
$iMemDev = $objItem.MemoryDevices
$iMaxCap = _ByteAutoSize($objItem.MaxCapacity * 1024, 0, 3)
$iErrCorr = Number($objItem.MemoryErrorCorrection)
Next
EndIf
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PhysicalMemory', 'WQL', 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
$x += 1
ReDim $aReturn[$x + 1][8]
$aReturn[$x][0] = $objItem.BankLabel
$aReturn[$x][1] = _ByteAutoSize($objItem.Capacity, 0, 3) & ' (max. ' & $iMaxCap & ')'
$aReturn[$x][2] = $objItem.TotalWidth & ' Bit'
$aReturn[$x][3] = $objItem.DeviceLocator & ' (max. ' & $iMemDev & ' Steckplätze)'
$aReturn[$x][4] = $aMemType[Number($objItem.MemoryType)]
$aReturn[$x][5] = $aFormFactor[Number($objItem.FormFactor)]
$aReturn[$x][6] = $aErrCorr[$iErrCorr]
$aReturn[$x][7] = $objItem.PartNumber
Next
EndIf
Return $aReturn
EndFunc ;==>_CI_GetRAM
;===============================================================================
; Function Name: _ByteAutoSize($iSize[, $iRound][, $iFormat][, $bThousands])
; Description:: Gibt einen Bytewert in einer bestimmten Einheit zurück
; Parameter(s): $iSize = Größe in Byte übergeben
; $iRound = Anzahl der Nachkommastellen (0...8)
; $iFormat = bestimmt den Rückgabewert
; 0 = Automatisch (je nach übergebenen Wert)
; 1 = in Byte
; 2 = in KByte
; 3 = in MByte
; 4 = in GByte
; $bThousands = Rückgabe mit Tausendertrennzeichen (True/False)
; Requirement(s): #include <String.au3>
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _ByteAutoSize($iSize, $iRound = 2, $iFormat = 0, $bThousands = True)
Local $aSize[4] = [' Byte', ' KByte', ' MByte', ' GByte'], $sReturn
If $iFormat < 0 Or $iFormat > 4 Then $iFormat = 0
If $iRound < 0 Or $iRound > 8 Then $iRound = 2
If Not IsBool($bThousands) Then $bThousands = False
$iSize = Abs($iSize)
If $iFormat = 0 Then
For $i = 30 To 0 Step -10
If $iSize > (2 ^ $i) Then
$iFormat = $i / 10 + 1
ExitLoop
EndIf
Next
EndIf
If $iFormat = 0 Then $iFormat = 1
$sReturn = StringFormat('%.' & $iRound & 'f', Round($iSize / (2 ^ (($iFormat - 1) * 10)), $iRound))
If $bThousands Then $sReturn = _StringAddThousandsSep($sReturn, '.', ',')
Return $sReturn & $aSize[$iFormat - 1]
EndFunc ;==>_ByteAutoSize
; #FUNCTION# ====================================================================================================================
; Name...........: _StringAddThousandsSep
; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
; Parameters ....: $sString - The string to be converted.
; $sThousands - Optional: The Thousands delimiter
; $sDecimal - Optional: The decimal delimiter
; Return values .: Success - The string with Thousands delimiter added.
; Author ........: SmOke_N (orignal _StringAddComma
; Modified.......: Valik (complete re-write, new function name)
; ===============================================================================================================================
Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
Local $sResult = "" ; Force string
Local $rKey = "HKCU\Control Panel\International"
If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
If UBound($aNumber) = 2 Then
Local $sLeft = $aNumber[0]
While StringLen($sLeft)
$sResult = $sThousands & StringRight($sLeft, 3) & $sResult
$sLeft = StringTrimRight($sLeft, 3)
WEnd
$sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
EndIf
Return $sResult
EndFunc ;==>_StringAddThousandsSep
Hier die Funktionen zum erkennen der Grafikkarte:
#include <Array.au3>
$aVideoController = _CI_GetVideoController()
_ArrayDisplay($aVideoController)
Func _CI_GetVideoController($strComputer = '.')
Local $aReturn[2][12] = [[ _
'Hersteller:', 'Beschreibung:', 'RAMDAC:', 'Grafikkarten-RAM:', _
'RAM-Typ:', 'Horiz. Auflösung:', 'Vertik. Auflösung:', 'Bits/Pixel:', _
'Anzahl der Farben:', 'Bildwiederholfrequenz:', 'Treiberversion:', 'Treiberdatum:']]
Local $aRAMType[14] = ['', 'Anderer', 'Unbekannt', 'VRAM', 'DRAM', 'SRAM', 'WRAM', 'EDO RAM', _
'Burst Sync DRAM', 'Pipelined Burst SRAM', 'CDRAM', '3DRAM', 'SDRAM', 'SGRAM']
Local $x = 0, $objWMIService, $colItems, $Output
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_VideoController', 'WQL', 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
$x += 1
ReDim $aReturn[$x + 1][12]
$aReturn[$x][0] = $objItem.AdapterCompatibility
$aReturn[$x][1] = $objItem.Description
$aReturn[$x][2] = $objItem.AdapterDACType
$aReturn[$x][3] = _ByteAutoSize($objItem.AdapterRAM, 0, 3)
$aReturn[$x][4] = $aRAMType[Number($objItem.VideoMemoryType)]
$aReturn[$x][5] = $objItem.CurrentHorizontalResolution
$aReturn[$x][6] = $objItem.CurrentVerticalResolution
$aReturn[$x][7] = $objItem.CurrentBitsPerPixel
$aReturn[$x][8] = _StringAddThousandsSep($objItem.CurrentNumberOfColors, '.', ',')
$aReturn[$x][9] = $objItem.CurrentRefreshRate & ' Hz'
$aReturn[$x][10] = $objItem.DriverVersion
$aReturn[$x][11] = _WMIDateStringToDate($objItem.DriverDate)
Next
EndIf
Return $aReturn
EndFunc ;==>_CI_GetVideoController
Func _WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 7, 2) & '.' & StringMid($dtmDate, 5, 2) & '.' & StringLeft($dtmDate, 4) _
& ' ' & StringMid($dtmDate, 9, 2) & ':' & StringMid($dtmDate, 11, 2) & ':' & StringMid($dtmDate, 13, 2))
EndFunc ;==>_WMIDateStringToDate
;===============================================================================
; Function Name: _ByteAutoSize($iSize[, $iRound][, $iFormat][, $bThousands])
; Description:: Gibt einen Bytewert in einer bestimmten Einheit zurück
; Parameter(s): $iSize = Größe in Byte übergeben
; $iRound = Anzahl der Nachkommastellen (0...8)
; $iFormat = bestimmt den Rückgabewert
; 0 = Automatisch (je nach übergebenen Wert)
; 1 = in Byte
; 2 = in KByte
; 3 = in MByte
; 4 = in GByte
; $bThousands = Rückgabe mit Tausendertrennzeichen (True/False)
; Requirement(s): #include <String.au3>
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _ByteAutoSize($iSize, $iRound = 2, $iFormat = 0, $bThousands = True)
Local $aSize[4] = [' Byte', ' KByte', ' MByte', ' GByte'], $sReturn
If $iFormat < 0 Or $iFormat > 4 Then $iFormat = 0
If $iRound < 0 Or $iRound > 8 Then $iRound = 2
If Not IsBool($bThousands) Then $bThousands = False
$iSize = Abs($iSize)
If $iFormat = 0 Then
For $i = 30 To 0 Step -10
If $iSize > (2 ^ $i) Then
$iFormat = $i / 10 + 1
ExitLoop
EndIf
Next
EndIf
If $iFormat = 0 Then $iFormat = 1
$sReturn = StringFormat('%.' & $iRound & 'f', Round($iSize / (2 ^ (($iFormat - 1) * 10)), $iRound))
If $bThousands Then $sReturn = _StringAddThousandsSep($sReturn, '.', ',')
Return $sReturn & $aSize[$iFormat - 1]
EndFunc ;==>_ByteAutoSize
; #FUNCTION# ====================================================================================================================
; Name...........: _StringAddThousandsSep
; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
; Parameters ....: $sString - The string to be converted.
; $sThousands - Optional: The Thousands delimiter
; $sDecimal - Optional: The decimal delimiter
; Return values .: Success - The string with Thousands delimiter added.
; Author ........: SmOke_N (orignal _StringAddComma
; Modified.......: Valik (complete re-write, new function name)
; ===============================================================================================================================
Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
Local $sResult = "" ; Force string
Local $rKey = "HKCU\Control Panel\International"
If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
If UBound($aNumber) = 2 Then
Local $sLeft = $aNumber[0]
While StringLen($sLeft)
$sResult = $sThousands & StringRight($sLeft, 3) & $sResult
$sLeft = StringTrimRight($sLeft, 3)
WEnd
$sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
EndIf
Return $sResult
EndFunc ;==>_StringAddThousandsSep
Die Timer-UDF ist nicht dasselbe wie AdlibRegister.
Hier mal an einem Beispiel veranschaulicht:
#include <Timers.au3>
Global $iCount = 0
$hGui = GUICreate('Test')
$hLabel = GUICtrlCreateLabel($iCount, 10, 10, 40, 20)
GUISetState()
AdlibRegister('_Counter')
MsgBox(0, 'Test1', 'Counter angehalten, wegen MsgBox')
AdlibUnRegister('_Counter')
$iTimer = _Timer_SetTimer($hGui, 250, '_TimerCounter')
MsgBox(0, 'Test2', 'Counter trotz MsgBox nicht angehalten')
Do
Until GUIGetMsg() = -3
_Timer_KillAllTimers($hGui)
Exit
Func _Counter()
$iCount += 1
GUICtrlSetData($hLabel, $iCount)
EndFunc
Func _TimerCounter($hWnd, $Msg, $iIDTimer, $dwTime)
#forceref $hWnd, $Msg, $iIDTimer, $dwTime
$iCount += 1
GUICtrlSetData($hLabel, $iCount)
EndFunc
Naja, über den Sinn eines solchen Skripts kann man ja geteilter Meinung sein.
Bei meinem Browser brauche ich lediglich einen rechten Mausklick auf ein Bild machen und "Grafik speichern unter..." auswählen.
Wozu also so umständlich? ![]()
Hier kommt jetzt ein Programm, zum synchronisieren zweier Verzeichnisse.
Man gibt also ein Quell- und ein Zielverzeichnis an und das Programm passt das Zielverzeichnis an das Quellverzeichnis an.
Das heißt, dass neue oder geänderte Dateien aus dem Quellverzeichnis ins Zielverzeichnis kopiert werden und alle Dateien/Verzeichnisse die sich im Zielverzeichnis befinden, im Quellverzeichnis aber nicht (mehr), im Zielverzeichnis gelöscht werden.
Ich habe das Programm so geschrieben, dass möglichst alle Fehleingaben (Quelle und Ziel gleich, Ziel ist Unterverzeichnis von Quelle, Ziel ist Teil von Quelle, Ziel ist Hauptpfad von Festplatte, usw.) entsprechend abgefangen werden.
Bevor das Programm irgendwelche Änderungen vornimmt, bekommt man außerdem eine Auflistung zu sehen, die man bestätigen oder abbrechen kann. Erst dann beginnt der Sync-Vorgang.
Wenn Dateien aus dem Quellverzeichnis im Zielverzeichnis bereits vorhanden sind, wird standardmäßig eine Gleichheitsprüfung vorgenommen.
Diese prüft ob sich die Dateigröße geändert hat. Da es aber sein kann, dass die zwei Dateien ungleich sind, obwohl sie die gleiche Dateigröße besitzen, habe ich noch einen Vergleich per Checksumme eingebaut.
Das erstellen der Checksummen dauert aber relativ lange, sodass dieser Vergleich nur als zusätzliche Option angeboten wird.
Man kann auch mehrere Profile erstellen/laden/löschen.
Screenshots:
Dann benutzt Du irgendwelche falschen Pfade oder, oder, oder...
Wie sollen wir das sagen ohne das Skript?
Benutze doch einfach einen Timer (hier zum Beispiel nach 5 Sekunden):
$iTimer = TimerInit()
$iBreak = 5000 ; <- in Millisekunden
while 1
Sleep(20)
If TimerDiff($iTimer) > $iBreak Then ExitLoop
WEnd
MsgBox(0, 'Test', 'Ende!')
Nachdem ich das jetzt mit einer ca. 100MB großen Datei getestet habe, schneidet die DLL von eukalyptus noch am besten ab.
Eukalyptus, wenn Du nichts dagegen hast, verwende ich Deine DLL in meinem Programm. Du kommst auch in die Credits. ![]()
Das spielt aber für mein Sync-Programm keine Rolle. In dem Fall wird es ja mit dem anderen Dateinamen (falls vorhanden) verglichen.
Ich bin gerade dabei ein Programm zum synchronisieren von Verzeichnissen zu erstellen.
Dafür benötige ich eine Funktion zum vergleichen des Inhalts der Dateien. Wenn der Dateiname gleich ist und die Dateigröße gleich ist, kann ja immer noch der Dateiinhalt unterschiedlich sein.
Deshalb muss ich eine Checksumme für die Dateien erstellen. Nun habe ich mit _Crypt_HashFile experimentiert:
#include <Crypt.au3>
_Crypt_Startup()
Global $iTimer, $sFile = @AutoItExe
$iTimer = TimerInit()
$sChecksum = _Crypt_HashFile($sFile, $CALG_MD2)
ConsoleWrite('MD2 = ' & TimerDiff($iTimer) & @CR)
$iTimer = TimerInit()
$sChecksum = _Crypt_HashFile($sFile, $CALG_MD4)
ConsoleWrite('MD4 = ' & TimerDiff($iTimer) & @CR)
$iTimer = TimerInit()
$sChecksum = _Crypt_HashFile($sFile, $CALG_MD5)
ConsoleWrite('MD5 = ' & TimerDiff($iTimer) & @CR)
$iTimer = TimerInit()
$sChecksum = _Crypt_HashFile($sFile, $CALG_SHA1)
ConsoleWrite('SHA1 = ' & TimerDiff($iTimer) & @CR)
_Crypt_Shutdown()
[/autoit]
Bei mir ist der MD4-Algorithmus am schnellsten = rund 12 ms. Das ist aber immer noch eine relativ lange Zeit für diese "kleine" Datei.
Gibt es da nicht vielleicht eine schnellere Methode? Oder muss ich damit leben?
Hier mal eine Liste mit meinen Favoriten:
- Band Aid - Do They Know It's Christmas
- Bing Crosby - Merry Christmas
- Bing Crosby & Rosemary Clooney - Silver Bells
- Chris Rea - Driving Home From Christmas
- Dean Martin - Let It Snow, Let It Snow, Let It Snow
- Dean Martin - Winter Wonderland
- Emerson, Lake & Palmer - I Believe In Father Christmas
- Errol Brown - Send A Prayer (To Heaven)
- Harry Belafonte - Christmas Medley
- Jim Reeves - Mary's Boychild
- Mike Oldfield - In Dulci Jubilo
- Pat Boone - Silver Bells
- Pat Boone - The First Noel