Es gibt ein schönes, kleines Script, mit dem man solche Dinge rausbekommt (AFAIR von BugFix):
Genauuu..
Manchmal bin ich richtig erstaunt, wieviel ich hier schon geposted habe. ![]()
Es gibt ein schönes, kleines Script, mit dem man solche Dinge rausbekommt (AFAIR von BugFix):
Genauuu..
Manchmal bin ich richtig erstaunt, wieviel ich hier schon geposted habe. ![]()
Tja, an der Stelle bin ich auch hängegeblieben, dadurch konnte ich keine derartige Funktion implementieren. Einziger Workaround derzeit: Die Keys parallel in einer Arraylist führen.
Das Problem ist folgendes:
.Keys liefert eine ICollection zurück. Das Objekt wird ordnungsgemäß erstellt und enthält laut .Count auch alle Elemente. Aber diese Collection reagiert scheinbar auf keine weitere Methode. Weder For $element In $oICol noch andere Versuche waren erfolgreich.
Vielleicht findet ja jemand mit mehr Objekterfahrung eine Lösung.
Ist mir vorher gar nicht aufgefallen - aber wenn du per Gerätemanager den Stick abmeldest, kann devcon nichts mehr erkennen. Das ist auch sichtbar, wenn du mit devcon abmeldest. Dann verbleibt trotzdem das Symbol für die Hardwareabmeldung im Tray, nur ohne Lw-Buchstaben. Die Abmeldung durch devcon ist also keine echte Hardwareentfernung.
Ich habe keine 2 identischen Sticks, sie nutzen aber dieselbe Bezeichnung, haben aber unterschiedliche ID's.
Wähle ich dagegen meinen USB-Stick aus und klicke auf Entfernen, erscheint folgender Fehler:
Kann es sein, dass du nicht die aktuelle Stable-Version hast? Die _ArraySearch-Funktion wurde nämlich verändert und hat jetzt einen Parameter mehr.
Auch nach deinen ganzen änderungen kommt diese Fehlermeldung :
C:\Users\Michael\Desktop\rt.au3 (134) : ==> Subscript used with non-Array variable.:
$tmp = _GetUSBCaption($pref[0])
$tmp = _GetUSBCaption($pref^ ERROR
Raupi, sicher dass If @error Then ExitLoop eingefügt ist? Denn in diesem Fall wird $pref[0] gar nicht zur Verarbeitung herangezogen.
Edit: In Post 1 ist der Code (auch im Anhang) jetzt aktualisiert.
Achja, die gute (böse) alte Floppy.
OK, Änderung wie folgt:
Func _GetRemovable()
Local $reg, $tmp, $val, $pref, $aDrive[1][3]
Local $var = DriveGetDrive( "REMOVABLE" )
If Not @error Then
For $i = 1 To UBound($var) -1
$val = ''
$reg = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" & $var[$i])
For $k = 1 To StringLen($reg) - 2 Step 2
$tmp = _HexToString(StringMid($reg, $k, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
$pref = _StringBetween($val, 'Media#', '&RM#', 1)
If @error Then ContinueLoop ; <========================= DIESE ZEILE EINFÜGEN !!!
If $aDrive[UBound($aDrive)-1][0] <> '' Then ReDim $aDrive[UBound($aDrive)+1][3]
$aDrive[UBound($aDrive)-1][0] = StringUpper($var[$i])
$tmp = _GetUSBCaption($pref[0])
$tmp = StringSplit($tmp, '|')
$aDrive[UBound($aDrive)-1][1] = $tmp[1]
$tmp = StringSplit($tmp[2], @LF)
$aDrive[UBound($aDrive)-1][2] = $tmp[1]
Next
EndIf
Return $aDrive
EndFunc ;==>_GetRemovable
Ich werde es gleich mal im ersten Post korrigieren.
Danke, habe ja inzwischen den passenden Registryschlüssel gefunden. Aber anscheinend wird nicht überall der Registry-Eintrag erstellt.
Lassen wir mal die Problemkinder diesen Code testen. ![]()
Hmm, eigentlich wird beim Einstecken eines eines USB-Devices ein Registryeintrag in HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\ erstellt (und nicht wieder entfernt), mit den Parametern des Devices.
Probiert mal bitte mit dem WMI-Code von hier: [ gelöst ] USB-Hardware-ID auslesen
Sollte bei eingestecktem Stick in etwa so etwas herauskommen:
\\ComputerName\root\cimv2:Win32_PnPEntity.DeviceID="USBSTOR\\DISK&VEN_USB&PROD_FLASH_DISK&REV_V1.1\\907310000250&0"
Wenn nicht... :wacko:
Da frag ich mich aber wie Installer die Pfade des schon installieren Progs so schnell finden.
Wenn es sauber installiert ist, reicht ein Blick in die Registry
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Dort in den Unterschlüsseln sind die Install-Infos hinterlegt.
Gib mal den Begriff "Rekursive Dateisuche" in die Suche ein - du wirst reich beschenkt. ![]()
Ich versteh nicht, wozu du dauernd deine 20 Meldungstextvariablen erstellen willst. Ein Array mit 20 Elementen tuts doch. ![]()
Hi,
ich habe ein Skript zum USB-Drive managen erstellt (Manage USB-Drives per devcon.exe).
Grundlegend gehe ich dabei so vor:
- Removable Laufwerke ermitteln
- aus Registry die Caption dieser Laufwerke ermitteln (nun hab ich Lw-Buchstabe und Name)
- mit devcon.exe Caption und Hardware-ID der Instanz USB ermitteln
- Lw-Buchstabe und Name mit Hardware-ID zusammenführen durch Abgleich des Namens
Das klappt auch - bis auf den Fall, dass 2 Sticks desselben Herstellers im PC stecken. Die haben dann oft auch dieselbe Caption.
Somit wird auch die Hardware-ID nicht zuverlässig zugeordnet.
Ich hab bis jetzt noch keine andere Möglichkeit entdeckt, die Hardware-ID direkt dem Lw-Buchstaben getreu auszulesen. Bin für jede Anregung dankbar. ![]()
OK - hat sich erledigt. Ich hatte mich mal wieder im Registry-Dschungel verirrt. ![]()
Hab den Schlüssel gefunden. Nun kann ich das Skript deutlich vereinfachen.
Hi Alina,grrr.. Schönheitsfehler. Da hab ich die Variablendeklaration innerhalb der Funktion an die falsche Zeile gesetzt. Einfach die ersten beiden Zeilen der Funktion tauschen, dann sollte es klappen.
Geänderte Version hochgeladen, dieser Fehler sollte damit auch behoben sein.
Was willst du denn als Ergebnis haben? Ein Suchergebnis oder evtl. mehrere?
Hi,
hier mal ein Bsp. wie es einfacher geht, brauchst es für den Rest nur analog zu machen:
While 1 ; -> Linie 403
Send("^c")
$sMeldungsText1 = ClipGet()
Send("{UP}")
Send("^c")
$sMeldungsText2 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText3 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText4 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText5 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText6 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText7 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText8 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText9 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText10 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText11 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText12 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText13 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText14 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText15 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText16 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText17 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText18 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText19 = ClipGet()
Send("{UP }")
Send("^c")
$sMeldungsText20 = ClipGet()
If $iniAusgangsPosition = 1 Then Send("{down 19}")
BlockInput(0)
Dim $avMeldungsText[20]
$avMeldungsText[0] = $sMeldungsText1
$avMeldungsText[1] = $sMeldungsText2
$avMeldungsText[2] = $sMeldungsText3
$avMeldungsText[3] = $sMeldungsText4
$avMeldungsText[4] = $sMeldungsText5
$avMeldungsText[5] = $sMeldungsText6
$avMeldungsText[6] = $sMeldungsText7
$avMeldungsText[7] = $sMeldungsText8
$avMeldungsText[8] = $sMeldungsText9
$avMeldungsText[9] = $sMeldungsText10
$avMeldungsText[10] = $sMeldungsText11
$avMeldungsText[11] = $sMeldungsText12
$avMeldungsText[12] = $sMeldungsText13
$avMeldungsText[13] = $sMeldungsText14
$avMeldungsText[14] = $sMeldungsText15
$avMeldungsText[15] = $sMeldungsText16
$avMeldungsText[16] = $sMeldungsText17
$avMeldungsText[17] = $sMeldungsText18
$avMeldungsText[18] = $sMeldungsText19
$avMeldungsText[19] = $sMeldungsText20
While 1 ; -> Linie 403
Global $avMeldungsText[20]
Send("^c")
$avMeldungsText[0] = ClipGet()
For $i = 1 To UBound($avMeldungsText) -1
Send("{UP}")
Send("^c")
$avMeldungsText[$i] = ClipGet()
Next
Hi,
es wurde ja schon in einigen Threads auf das Tool devcon hingewiesen. Ich habe mal alle Beschreibungen zu den einzelnen Befehlen zusammengefaßt. Hier findet ihr die Syntaxbeschreibung.
Nicht wundern, dass ein Scan recht lange dauert. Als Trigger verwende ich die durch die Hardwareerkennung gestartete rundll32.exe. Erst wenn diese beendet wurde, wird die Liste neu geschrieben.
Edit: Habe die Zuordnung der Hardware-ID geändert. Nun ist gesichert, dass bei Sticks mit identischer Bezeichnung auch die ID zum Laufwerk stimmt.
Edit: Da ich ständig am Laptop arbeite, war mir der Fehler mit der Floppy gar nicht bewußt geworden.
Ich überprüfe im Registryeintrag auf $pref = _StringBetween($val, 'Media#', '&RM#', 1). Nur bei USB-Speichermedien ist dieser String in der Kennung enthalten. Jetzt habe ich dahinter eine Fehlerabfrage gesetzt mit ContinueLoop im Fehlerfall. Damit sollte eigentlich die Floppy keine Probleme mehr machen.
Über weiteres Feedback bin ich natürlich erfreut. ![]()
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Constants.au3>
#include <Array.au3>
Opt('GUIOnEventMode', 1)
Global $path_Devcon = @MyDocumentsDir & '\DOWNLOADS\TOOLS\Devcon\i386\devcon.exe' ; <<===== Pfad anpassen
Global $aRemovable, $strRun
$gui = GUICreate('Manage USB-Drive', 500, 120)
GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
$hListView = GUICtrlCreateListView('Laufwerk|Bezeichnung', 10, 10, 350, 100)
_GUICtrlListView_SetColumnWidth($hListView, 0, 60)
_GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER )
$btRemove = GUICtrlCreateButton('Entfernen', 380, 10, 100, 20)
GUICtrlSetOnEvent(-1, '_entfernen')
$btScan = GUICtrlCreateButton('Scan', 380, 40, 100, 20)
GUICtrlSetOnEvent(-1, '_scan')
GUISetState()
_LVwrite()
While 1
Sleep(100)
WEnd
Func _ende()
Exit
EndFunc
Func _setStat($disable=True)
Local $stat = $GUI_ENABLE
If $disable Then $stat = $GUI_DISABLE
GUICtrlSetState($btRemove, $stat)
GUICtrlSetState($btScan, $stat)
EndFunc ;==>_setStat
Func _RunDevcon($strRun)
Local $data, $foo = Run("cmd.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
StdinWrite($foo, $strRun & @CRLF)
StdinWrite($foo)
While True
$data &= StdoutRead($foo)
If @error Then ExitLoop
Sleep(25)
WEnd
Local $split = StringSplit($data, @LF)
$data = ''
For $i = 5 To $split[0]
If StringStripWS($split[$i],
== '' Then ExitLoop
$data &= $split[$i]
Next
Return $data
EndFunc ;==>_RunDevcon
Func _LVwrite()
$aRemovable = _GetRemovable()
If Not $aRemovable[0][0] Then Return
For $i = 0 To UBound($aRemovable) -1
GUICtrlCreateListViewItem($aRemovable[$i][0] & '|' & $aRemovable[$i][1], $hListView)
Next
EndFunc ;==>_LVwrite
Func _entfernen()
_setStat()
Local $index = _GUICtrlListView_GetSelectedIndices($hListView)
If $index = '' Then
_setStat(False)
Return
EndIf
Local $indRemove = _ArraySearch($aRemovable, _GUICtrlListView_GetItemText(GUICtrlGetHandle($hListView), $index, 1),0,0,0,0,1,1)
_GUICtrlListView_DeleteAllItems($hListView)
WinSetTitle($gui, '', 'Laufwerk wird entfernt..')
_Remove($aRemovable[$indRemove][2])
WinSetTitle($gui, '', 'Laufwerk wurde entfernt')
_LVwrite()
Sleep(500)
WinSetTitle($gui, '', 'Manage USB-Drive')
_setStat(False)
EndFunc ;==>_entfernen
Func _scan()
_setStat()
Local $count1 = 0, $count2 = 0, $list1 = ProcessList('rundll32.exe')
If Not @error Then $count1 = $list1[0][0]
_GUICtrlListView_DeleteAllItems($hListView)
WinSetTitle($gui, '', 'Es wird gescannt..')
$strRun = '"' & $path_Devcon & '" rescan'
_RunDevcon($strRun)
$list2 = ProcessList('rundll32.exe')
If Not @error Then $count2 = $list2[0][0]
If $count2 > $count1 And $count1 = 0 Then
Do
Sleep(50)
Until Not ProcessExists($list2[1][0])
ElseIf $count2 > $count1 Then
For $i = 1 To UBound($list2) -1
If _ArraySearch($list1, $list2[$i][0]) = -1 Then
Do
Sleep(50)
Until Not ProcessExists($list2[$i][0])
ExitLoop
EndIf
Next
EndIf
WinSetTitle($gui, '', 'Scan beendet')
_LVwrite()
Sleep(500)
WinSetTitle($gui, '', 'Manage USB-Drive')
_setStat(False)
EndFunc ;==>_scan
Func _Remove($ID)
$strRun = '"' & $path_Devcon & '" remove ' & $ID
_RunDevcon($strRun)
EndFunc ;==>_Remove
Func _GetRemovable()
Local $reg, $tmp, $val, $pref, $aDrive[1][3]
Local $var = DriveGetDrive( "REMOVABLE" )
If Not @error Then
For $i = 1 To UBound($var) -1
$val = ''
$reg = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" & $var[$i])
For $k = 1 To StringLen($reg) - 2 Step 2
$tmp = _HexToString(StringMid($reg, $k, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
$pref = _StringBetween($val, 'Media#', '&RM#', 1)
If @error Then ContinueLoop
If $aDrive[UBound($aDrive)-1][0] <> '' Then ReDim $aDrive[UBound($aDrive)+1][3]
$aDrive[UBound($aDrive)-1][0] = StringUpper($var[$i])
$tmp = _GetUSBCaption($pref[0])
$tmp = StringSplit($tmp, '|')
$aDrive[UBound($aDrive)-1][1] = $tmp[1]
$tmp = StringSplit($tmp[2], @LF)
$aDrive[UBound($aDrive)-1][2] = $tmp[1]
Next
EndIf
Return $aDrive
EndFunc ;==>_GetRemovable
Func _GetUSBCaption($strIDPrefix)
Local $aUSB[1]=[0], $i = 0, $k, $var, $sub, $sRet
While 1
$i += 1
$var = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR', $i)
If Not @error Then
$k = 0
While 1
$k += 1
$sub = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $var, $k)
If Not @error Then
ReDim $aUSB[UBound($aUSB)+1]
$aUSB[UBound($aUSB)-1] = $var & '\' & $sub
Else
ExitLoop
EndIf
WEnd
Else
ExitLoop
EndIf
WEnd
For $i = 1 To UBound($aUSB) -1
$var = RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $aUSB[$i], 'ParentIdPrefix')
If Not @error Then
If $var = $strIDPrefix Then
$sRet = RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $aUSB[$i], 'FriendlyName')
Return $sRet & '|' & RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $aUSB[$i], 'HardwareID')
EndIf
EndIf
Next
EndFunc ;==>_GetUSBCaption
#include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit]Local $path_Devcon = @MyDocumentsDir & '\DOWNLOADS\TOOLS\Devcon\i386\devcon.exe' ; <<===== Pfad anpassen
Local $strRun, $ID
; Name und Hardware-ID der Instance-ID USB ausgeben
$strRun = '"' & $path_Devcon & '" hwids *USB*'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; mögliche Ausgabe:
; USB\VID_13FE&PID_1D00\907310000250
; Name: USB-Massenspeichergerät
; Hardware ID's:
; USB\Vid_13fe&Pid_1d00&Rev_0110
; USB\Vid_13fe&Pid_1d00
; Compatible ID's:
; USB\Class_08&SubClass_06&Prot_50
; USB\Class_08&SubClass_06
; USB\Class_08
; Entfernen des USB-Massenspeichers mit der ID "USB\Vid_13fe&Pid_1d00&Rev_0110"
#cs
$ID = '"USB\Vid_13fe&Pid_1d00&Rev_0110"' ; <<------- ID in Anführungszeichen einfassen, sonst Fehler in Console
$strRun = '"' & $path_Devcon & '" remove ' & $ID
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
#ce
; Scannen nach neu angeschlossener Hardware, z.B. wieder Aktivieren eines zuvor entfernten USB-Sticks
$strRun = '"' & $path_Devcon & '" rescan'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; alle PCI-Geräte auf dem Computer ausgeben
$strRunRun = '"' & $path_Devcon & '" -m:\\' & @ComputerName & ' find pci\*'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; Anzeigen aller bekannten Setupklassen
$strRun = '"' & $path_Devcon & '" classes'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; Anzeigen von Dateien, die jeweils mit den in der Setupklasse ports (Anschlüsse) enthaltenen
; Geräten verknüpft sind
$strRun = '"' & $path_Devcon & '" driverfiles =ports'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; Anzeigen der Geräteinstanzen aller Geräte , die auf dem lokalen Computer vorhanden sind.
$strRun = '"' & $path_Devcon & '" find *'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; Anzeigen aller "nicht vorhandenen" Geräte und vorhandenen Geräte der Klasse ports (Anschlüsse).
; Dies schließt auch Geräte ein, die entfernt wurden, Geräte die von einem Steckplatz zu einem anderen
; Steckplatz versetzt wurden, und möglicherweise auch Geräte, die aufgrund einer BIOS-Änderung anders
; aufgezählt wurden.
$strRun = '"' & $path_Devcon & '" findall =ports'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; Anzeigen aller vorhandenen Geräte aller angegebenen Klassen (in diesem Fall der Klassen "USB" und "1394").
$strRun = '"' & $path_Devcon & '" listclass usb 1394'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
; Anzeigen der Ressourcen, die von den Geräten der Setupklasse USB verwendet werden.
$strRun = '"' & $path_Devcon & '" resources =usb'
ConsoleWrite(_RunDevcon($strRun) & @CRLF)
Func _RunDevcon($strRun)
Local $data, $foo = Run("cmd.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
StdinWrite($foo, $strRun & @CRLF)
StdinWrite($foo)
While True
$data &= StdoutRead($foo)
If @error Then ExitLoop
Sleep(25)
WEnd
Local $split = StringSplit($data, @LF)
$data = ''
For $i = 5 To $split[0]
If StringStripWS($split[$i],
== '' Then ExitLoop
$data &= $split[$i]
Next
Return $data
EndFunc
DL bisher: 14
Da kann ich leider nicht helfen. Aufgrund schlechter Erfahrungen vertraue ich keinem Windowstool die Arbeit an Partitionen an. Dazu kommt mir nur Linux ans Werk. ![]()
Oder meinst du was anderes?
Da hatte ich mich vertan, das gilt nur für _GetNextVisible (wie schon der Name sagt
)
And the winner is... bernd ![]()
Hi Tweaky,
wenn alles ausgeklappt ist und du möchtest die Werte aller Einträge lesen, arbeite mit _GetNext
Func _auslesen($hTreeView, $hItem)
$hItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
ConsoleWrite("Erstes " & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
While True
$hItem = _GUICtrlTreeView_GetNext($hTreeView, $hItem)
If $hItem = 0 Then ExitLoop
ConsoleWrite("Nächstes " & _GUICtrlTreeView_GetText($hTreeView, $hItem) & @CRLF)
WEnd
EndFunc
Du kannst nochmals gewaltig beschleunigen, wenn du meine Funktion zum Primzahlcheck verwendest.
Meine Funktion dient ursprünglich zur Primfaktorzerlegung - aber bei nur einem Primfaktor als Ergebnis ist dies somit automatisch auch eine Primzahl.
Hier mal beide Funktionen im Vergleichstest:
Local $zahl, $start, $time, $sumFunc1 = 0, $sumFunc2 = 0
For $i = 1 To 200
ConsoleWrite($i & @TAB)
$zahl = Random(10, 100000000, 1)
ConsoleWrite($zahl & @CRLF)
$start = TimerInit()
ConsoleWrite('_primzahlcheck:' & @TAB & @TAB & _primzahlcheck($zahl) & @TAB)
$time = TimerDiff($start)
ConsoleWrite($time & @CRLF)
$sumFunc1 += $time
$start = TimerInit()
ConsoleWrite('_GetPrimeFactors:' & @TAB & _GetPrimeFactors($zahl, True) & @TAB )
$time = TimerDiff($start)
ConsoleWrite($time & @CRLF)
$sumFunc2 += $time
Next
ConsoleWrite(@CRLF & 'Durchscnitt Func _primzahlcheck:' & @TAB & $sumFunc1/200 & @CRLF)
ConsoleWrite('Durchscnitt Func _GetPrimeFactors:' & @TAB & $sumFunc2/200 & @CRLF)
Func _primzahlcheck($input_zahl)
$teiler = 2
$return = True
While $teiler <= Sqrt($input_zahl)
$rest = Mod($input_zahl,$teiler)
If $rest = 0 Then
$return = False
EndIf
$teiler = $teiler + 1
WEnd
Return $return
EndFunc
Func _GetPrimeFactors($n, $bPrime=False)
Local $F = ObjCreate("System.Collections.ArrayList")
While Mod($n,2) == 0
If $bPrime Then Return False
$F.add(2)
$n = $n/2
WEnd
While Mod($n,3) == 0
If $bPrime Then Return False
$F.add(3)
$n = $n/3
WEnd
Local $t = 5
Local $diff = 2
While $t*$t <= $n
While Mod($n,$t) == 0
If $bPrime Then Return False
$F.add($t)
$n = $n/$t
WEnd
$t = $t + $diff
$diff = 6 - $diff
WEnd
If $n > 1 Then $F.add($n)
If $bPrime Then
If $F.Count > 1 Then
Return False
Else
Return True
EndIf
EndIf
Local $out = ''
For $element In $F
$out &= $element & ','
Next
Return StringTrimRight($out, 1)
EndFunc
Und das sind die Ergebnisse, meine Funktion ist im Durchschnitt 28-mal schneller als die von dir verwendete
:
1 38316802
_primzahlcheck: False 65.9527956765455
_GetPrimeFactors: False 20.550935942976
2 54952960
_primzahlcheck: False 83.4793248862635
_GetPrimeFactors: False 0.411504814159341
3 94876847
_primzahlcheck: False 80.8616737602125
_GetPrimeFactors: False 0.440558786102703
4 15599245
_primzahlcheck: False 29.8968164948338
_GetPrimeFactors: False 0.256177810308293
5 62055821
_primzahlcheck: False 67.980986410284
_GetPrimeFactors: False 1.91029865527602
6 32049530
_primzahlcheck: False 43.094303884991
_GetPrimeFactors: False 0.262603207949614
7 33319150
_primzahlcheck: False 55.5447689580659
_GetPrimeFactors: False 0.38496512824954
8 82077769
_primzahlcheck: False 73.2662950179422
_GetPrimeFactors: False 0.664330243089555
9 82104507
_primzahlcheck: False 79.2740418125767
_GetPrimeFactors: False 0.39139052589086
10 1422896
_primzahlcheck: False 9.21178529673464
_GetPrimeFactors: False 0.216228598886171
11 11449300
_primzahlcheck: False 25.7759016858288
_GetPrimeFactors: False 0.221536536068132
12 26949319
_primzahlcheck: False 42.5456307994452
_GetPrimeFactors: False 5.33363877252556
13 2515782
_primzahlcheck: False 16.7538053020705
_GetPrimeFactors: False 0.347530202860978
14 20803390
_primzahlcheck: False 35.0307092102488
_GetPrimeFactors: False 0.262044477719934
15 8259366
_primzahlcheck: False 27.3741495078285
_GetPrimeFactors: False 0.38971433520182
16 62478795
_primzahlcheck: False 68.4218245615015
_GetPrimeFactors: False 0.37462861900046
17 62125257
_primzahlcheck: False 61.848363409316
_GetPrimeFactors: False 0.364012744636539
18 75881925
_primzahlcheck: False 72.8025489273078
_GetPrimeFactors: False 0.362615919062339
19 224508
_primzahlcheck: False 3.57112426299991
_GetPrimeFactors: False 0.177676213038249
20 45545117
_primzahlcheck: False 65.6946623104333
_GetPrimeFactors: False 10.2144266938955
21 53540560
_primzahlcheck: False 58.6479566537088
_GetPrimeFactors: False 0.38775877939794
22 49266386
_primzahlcheck: False 82.2724675901546
_GetPrimeFactors: False 0.3874794142831
23 48271431
_primzahlcheck: False 78.86672747514
_GetPrimeFactors: False 0.404800051403181
24 41782662
_primzahlcheck: False 49.1263554446166
_GetPrimeFactors: False 0.260927017260574
25 30568126
_primzahlcheck: False 50.6581143692844
_GetPrimeFactors: False 0.364571474866219
26 89628765
_primzahlcheck: False 77.7590447947993
_GetPrimeFactors: False 0.393066716579901
27 92494404
_primzahlcheck: False 81.5257246381873
_GetPrimeFactors: False 0.39139052589086
28 74613066
_primzahlcheck: False 73.7613300014387
_GetPrimeFactors: False 0.362615919062339
29 27798273
_primzahlcheck: False 41.1334401439289
_GetPrimeFactors: False 0.323504802984737
30 61059898
_primzahlcheck: False 68.5503325143279
_GetPrimeFactors: False 0.367085760899779
31 19305957
_primzahlcheck: False 33.5168296529308
_GetPrimeFactors: False 0.271542891624494
32 81837931
_primzahlcheck: False 81.4595151059702
_GetPrimeFactors: False 0.435809579150423
33 85800904
_primzahlcheck: False 78.1090892836939
_GetPrimeFactors: False 0.37434925388562
34 56748286
_primzahlcheck: False 57.1603374171857
_GetPrimeFactors: False 0.258971461456694
35 25998163
_primzahlcheck: False 48.8299490577713
_GetPrimeFactors: False 8.46252805873372
36 98609986
_primzahlcheck: False 83.8047852450521
_GetPrimeFactors: False 0.38161274687146
37 61745560
_primzahlcheck: False 62.3593222043584
_GetPrimeFactors: False 0.339149249415778
38 61185169
_primzahlcheck: False 69.3736215077615
_GetPrimeFactors: False 0.685282626702556
39 48236025
_primzahlcheck: False 55.3908387797891
_GetPrimeFactors: False 0.305904800749816
40 92263198
_primzahlcheck: False 81.1368483983299
_GetPrimeFactors: False 0.355073060961659
41 19467782
_primzahlcheck: False 36.9153062749595
_GetPrimeFactors: False 0.364850839981059
42 83212050
_primzahlcheck: False 78.1845178647007
_GetPrimeFactors: False 0.393066716579901
43 16043653
_primzahlcheck: False 32.3035469591806
_GetPrimeFactors: False 16.9390243732094
44 64287267
_primzahlcheck: False 64.5894939161262
_GetPrimeFactors: False 0.367365126014619
45 85577977
_primzahlcheck: False 77.6637812906389
_GetPrimeFactors: False 0.847035028194924
46 3673956
_primzahlcheck: False 14.5990621713095
_GetPrimeFactors: False 0.230196854628172
47 65464480
_primzahlcheck: False 75.0500412761957
_GetPrimeFactors: False 0.402006400254781
48 78601399
_primzahlcheck: False 67.3049228323711
_GetPrimeFactors: False 0.415136560652262
49 61612903
_primzahlcheck: False 67.0476275616035
_GetPrimeFactors: False 0.406755607207061
50 58606234
_primzahlcheck: False 59.1603122743254
_GetPrimeFactors: False 0.319873056491817
51 67125009
_primzahlcheck: False 75.0645682621674
_GetPrimeFactors: False 0.403403225828981
52 97460905
_primzahlcheck: False 83.0024486352316
_GetPrimeFactors: False 0.397536558417341
53 4551673
_primzahlcheck: False 16.0732718823202
_GetPrimeFactors: False 0.3777016352637
54 40740937
_primzahlcheck: False 50.0759174699578
_GetPrimeFactors: False 0.971352504298731
55 31034894
_primzahlcheck: False 48.3337966138154
_GetPrimeFactors: False 0.339428614530618
56 22348738
_primzahlcheck: False 37.1536047179181
_GetPrimeFactors: False 0.356190521421019
57 99283219
_primzahlcheck: False 86.6626903698654
_GetPrimeFactors: False 0.411504814159341
58 28549110
_primzahlcheck: False 44.5998024888638
_GetPrimeFactors: False 0.368203221359139
59 44692524
_primzahlcheck: False 56.6949151358622
_GetPrimeFactors: False 0.336914328497058
60 95564675
_primzahlcheck: False 84.94347745314
_GetPrimeFactors: False 0.423796879212302
61 47564778
_primzahlcheck: False 52.5429907991099
_GetPrimeFactors: False 0.295847656615575
62 92613604
_primzahlcheck: False 83.1228549997276
_GetPrimeFactors: False 0.38384766779018
63 75986223
_primzahlcheck: False 80.0744228665934
_GetPrimeFactors: False 0.408711163010941
64 53135157
_primzahlcheck: False 55.5693530881718
_GetPrimeFactors: False 0.314006389080176
65 26909469
_primzahlcheck: False 41.3396115986808
_GetPrimeFactors: False 0.346412742401618
66 64884749
_primzahlcheck: False 67.3686180785547
_GetPrimeFactors: False 1.19260967525202
67 50395849
_primzahlcheck: False 64.0098113028332
_GetPrimeFactors: False 0.435809579150423
68 8690226
_primzahlcheck: False 25.709133423382
_GetPrimeFactors: False 0.314844484424696
69 36530658
_primzahlcheck: False 47.410774274384
_GetPrimeFactors: False 0.315961944884056
70 1448416
_primzahlcheck: False 9.53445200437486
_GetPrimeFactors: False 0.234387331350772
71 80163175
_primzahlcheck: False 75.6696731009109
_GetPrimeFactors: False 0.368482586473979
72 47475981
_primzahlcheck: False 58.0163121290555
_GetPrimeFactors: False 0.346692107516458
73 10948703
_primzahlcheck: False 25.0610063569532
_GetPrimeFactors: False 0.405079416518021
74 98152326
_primzahlcheck: False 82.8222581361598
_GetPrimeFactors: False 0.510400064812707
75 35470201
_primzahlcheck: False 51.1788509433461
_GetPrimeFactors: False 0.472406409194465
76 6099128
_primzahlcheck: False 21.177831260677
_GetPrimeFactors: False 0.333003216889297
77 76201529
_primzahlcheck: True 74.1909935480627
_GetPrimeFactors: True 41.51561162103
78 35769195
_primzahlcheck: False 51.6040446481327
_GetPrimeFactors: False 0.37379052365594
79 46066021
_primzahlcheck: True 52.9310289436227
_GetPrimeFactors: True 31.4914325703406
80 49155727
_primzahlcheck: False 56.190661103576
_GetPrimeFactors: False 1.03644457605645
81 90398559
_primzahlcheck: False 83.5125693349294
_GetPrimeFactors: False 0.408990528125781
82 49573234
_primzahlcheck: False 54.7561212388725
_GetPrimeFactors: False 0.322107977410537
83 63669963
_primzahlcheck: False 67.591551440197
_GetPrimeFactors: False 0.3818921119863
84 52417788
_primzahlcheck: False 58.1951058025531
_GetPrimeFactors: False 0.356190521421019
85 743386
_primzahlcheck: False 11.1173347450584
_GetPrimeFactors: False 0.38999370031666
86 15160747
_primzahlcheck: False 38.363814395405
_GetPrimeFactors: False 0.433854023346543
87 30997549
_primzahlcheck: False 43.9304436737071
_GetPrimeFactors: False 0.370717507392699
88 32129593
_primzahlcheck: False 49.6448570977596
_GetPrimeFactors: False 0.478831806835785
89 43432184
_primzahlcheck: False 51.4294414513576
_GetPrimeFactors: False 0.313727023965336
90 33459767
_primzahlcheck: False 50.9701652025607
_GetPrimeFactors: False 0.414298465307742
91 67865047
_primzahlcheck: True 64.1397160812338
_GetPrimeFactors: True 36.8834586518678
92 25511866
_primzahlcheck: False 40.7431670784974
_GetPrimeFactors: False 0.343898456368058
93 20692077
_primzahlcheck: False 39.4131097667441
_GetPrimeFactors: False 0.38943497008698
94 789347
_primzahlcheck: False 7.25371520682098
_GetPrimeFactors: False 0.265117493983174
95 97296117
_primzahlcheck: False 87.5683920721768
_GetPrimeFactors: False 0.403961956058661
96 80359278
_primzahlcheck: False 75.307895277193
_GetPrimeFactors: False 0.369320681818499
97 25440988
_primzahlcheck: False 38.8468366789634
_GetPrimeFactors: False 0.264000033523814
98 17248224
_primzahlcheck: False 31.4777436797135
_GetPrimeFactors: False 0.235225426695292
99 41985947
_primzahlcheck: True 59.9349917377767
_GetPrimeFactors: True 24.9579206295772
100 42903884
_primzahlcheck: False 62.2685285420354
_GetPrimeFactors: False 0.3790984608379
101 35061041
_primzahlcheck: False 45.2990533713084
_GetPrimeFactors: False 0.819657246940603
102 12411042
_primzahlcheck: False 26.3818446199168
_GetPrimeFactors: False 0.203936533833211
103 94988694
_primzahlcheck: False 81.9674008847493
_GetPrimeFactors: False 0.363454014406859
104 8125384
_primzahlcheck: False 22.1877361508236
_GetPrimeFactors: False 0.245282570829533
105 62812441
_primzahlcheck: True 74.2510570477533
_GetPrimeFactors: True 30.3147467066345
106 61796311
_primzahlcheck: False 67.6974308187214
_GetPrimeFactors: False 0.628571508390033
107 62661044
_primzahlcheck: False 66.4372147856781
_GetPrimeFactors: False 0.361777823717819
108 73818618
_primzahlcheck: False 66.978624378238
_GetPrimeFactors: False 0.334400042463497
109 15245422
_primzahlcheck: False 32.18230249934
_GetPrimeFactors: False 0.339987344760298
110 73047170
_primzahlcheck: False 70.4005676699134
_GetPrimeFactors: False 0.352558774928098
111 69628908
_primzahlcheck: False 75.5649111828459
_GetPrimeFactors: False 0.395022272383781
112 83622820
_primzahlcheck: False 80.8697753485429
_GetPrimeFactors: False 0.39055243054634
113 59805203
_primzahlcheck: True 60.9817728230823
_GetPrimeFactors: True 29.1833179915324
114 89154036
_primzahlcheck: False 79.3287973750854
_GetPrimeFactors: False 0.358704807454579
115 67341187
_primzahlcheck: False 75.8448350279156
_GetPrimeFactors: False 0.481904823099025
116 48000369
_primzahlcheck: False 52.3614034744639
_GetPrimeFactors: False 0.38496512824954
117 165838
_primzahlcheck: False 3.11492103046616
_GetPrimeFactors: False 0.18326351533505
118 51573242
_primzahlcheck: False 62.2199190120532
_GetPrimeFactors: False 0.355631791191339
119 13383060
_primzahlcheck: False 27.8493495681714
_GetPrimeFactors: False 0.234387331350772
120 91077568
_primzahlcheck: False 85.2496616190046
_GetPrimeFactors: False 0.39194925612054
121 86069584
_primzahlcheck: False 72.6413552560451
_GetPrimeFactors: False 0.360660363258459
122 37217762
_primzahlcheck: False 52.1471304313816
_GetPrimeFactors: False 0.338311154071258
123 18808243
_primzahlcheck: False 32.9173121164841
_GetPrimeFactors: False 0.421561958293582
124 25816319
_primzahlcheck: False 46.4176312911278
_GetPrimeFactors: False 0.426311165245862
125 67562288
_primzahlcheck: False 62.1436523357019
_GetPrimeFactors: False 0.264558763753494
126 57089480
_primzahlcheck: False 65.2077289152672
_GetPrimeFactors: False 0.355631791191339
127 67414963
_primzahlcheck: False 66.6162878242905
_GetPrimeFactors: False 0.422120688523262
128 38312609
_primzahlcheck: True 53.637822684168
_GetPrimeFactors: True 26.9928161260719
129 69111809
_primzahlcheck: False 74.6533428131229
_GetPrimeFactors: False 0.457320692993104
130 839569
_primzahlcheck: False 6.8880262714954
_GetPrimeFactors: False 0.275174638117414
131 68923892
_primzahlcheck: False 71.2788915909704
_GetPrimeFactors: False 0.37379052365594
132 8200151
_primzahlcheck: False 23.0613108649284
_GetPrimeFactors: False 0.464584185978944
133 476321
_primzahlcheck: False 6.69051513530351
_GetPrimeFactors: False 1.66892719605425
134 70237925
_primzahlcheck: False 76.0917937894341
_GetPrimeFactors: False 0.434692118691063
135 50930142
_primzahlcheck: False 55.0444260373874
_GetPrimeFactors: False 0.295568291500735
136 42624013
_primzahlcheck: True 49.1827871978143
_GetPrimeFactors: True 33.6623788777624
137 53042257
_primzahlcheck: True 55.3006038476957
_GetPrimeFactors: True 31.375496047682
138 3417697
_primzahlcheck: False 21.1705677676911
_GetPrimeFactors: False 0.725231838124678
139 97101992
_primzahlcheck: False 79.1804544991053
_GetPrimeFactors: False 0.357587346995219
140 26074242
_primzahlcheck: False 46.4385836747408
_GetPrimeFactors: False 0.361219093488139
141 29607602
_primzahlcheck: False 40.9085512264827
_GetPrimeFactors: False 0.235225426695292
142 98678823
_primzahlcheck: False 84.8035155306052
_GetPrimeFactors: False 0.38273020733082
143 20752101
_primzahlcheck: False 34.557185340595
_GetPrimeFactors: False 0.255898445193453
144 38099435
_primzahlcheck: False 55.0282228607267
_GetPrimeFactors: False 0.602031822480231
145 16430905
_primzahlcheck: False 31.1969817392993
_GetPrimeFactors: False 0.477993711491265
146 53211731
_primzahlcheck: False 65.7466242217935
_GetPrimeFactors: False 0.660698496596634
147 8803946
_primzahlcheck: False 23.131710873868
_GetPrimeFactors: False 0.252546063815373
148 47077549
_primzahlcheck: False 55.7299880292048
_GetPrimeFactors: False 0.968558853150331
149 58280691
_primzahlcheck: False 69.6362247157111
_GetPrimeFactors: False 0.37965719106758
150 49235151
_primzahlcheck: False 61.9832967597837
_GetPrimeFactors: False 0.395022272383781
151 56024301
_primzahlcheck: False 56.6856960870725
_GetPrimeFactors: False 0.255619080078613
152 12060215
_primzahlcheck: False 33.7020487240697
_GetPrimeFactors: False 0.435809579150423
153 32104739
_primzahlcheck: True 49.9437777706384
_GetPrimeFactors: True 21.665044020958
154 73971083
_primzahlcheck: False 73.3894950335867
_GetPrimeFactors: False 0.482463553328705
155 83304416
_primzahlcheck: False 70.9928217133742
_GetPrimeFactors: False 0.332444486659617
156 71455654
_primzahlcheck: False 75.6830826264232
_GetPrimeFactors: False 0.392787351465061
157 96056174
_primzahlcheck: False 82.4574072961787
_GetPrimeFactors: False 0.370158777163019
158 56152821
_primzahlcheck: False 58.1671692910691
_GetPrimeFactors: False 0.327974644822177
159 56943402
_primzahlcheck: False 62.9769984732697
_GetPrimeFactors: False 0.347250837746138
160 44450707
_primzahlcheck: False 54.238457681074
_GetPrimeFactors: False 0.396139732843141
161 77482745
_primzahlcheck: False 75.40930481388
_GetPrimeFactors: False 1.15210173360022
162 78657837
_primzahlcheck: False 77.3084288645624
_GetPrimeFactors: False 0.526882606588267
163 20992979
_primzahlcheck: False 38.0671286434449
_GetPrimeFactors: False 0.417930211800662
164 79332653
_primzahlcheck: False 76.5633621032841
_GetPrimeFactors: False 18.6537674480975
165 65986251
_primzahlcheck: False 73.7515522224193
_GetPrimeFactors: False 0.402565130484461
166 84684237
_primzahlcheck: False 88.9744366951666
_GetPrimeFactors: False 0.705117549856197
167 70897342
_primzahlcheck: False 64.9934558721849
_GetPrimeFactors: False 0.323225437869897
168 70376240
_primzahlcheck: False 71.6739138633541
_GetPrimeFactors: False 0.358984172569419
169 89043434
_primzahlcheck: False 72.9886060937912
_GetPrimeFactors: False 0.316800040228577
170 49241519
_primzahlcheck: False 65.1278304924229
_GetPrimeFactors: False 0.785015972700441
171 47089342
_primzahlcheck: False 59.4022424637768
_GetPrimeFactors: False 0.370717507392699
172 48611779
_primzahlcheck: True 53.7571115882047
_GetPrimeFactors: True 27.675305101626
173 58237697
_primzahlcheck: False 63.8500144571447
_GetPrimeFactors: False 0.39250798635022
174 62760676
_primzahlcheck: False 61.2449347612616
_GetPrimeFactors: False 0.313168293735656
175 76165074
_primzahlcheck: False 72.1728599584584
_GetPrimeFactors: False 0.355073060961659
176 70125003
_primzahlcheck: False 74.0619268650066
_GetPrimeFactors: False 0.364850839981059
177 11748025
_primzahlcheck: False 29.6948355168045
_GetPrimeFactors: False 0.411225449044501
178 72754557
_primzahlcheck: False 72.2334821883787
_GetPrimeFactors: False 0.355911156306179
179 88929828
_primzahlcheck: False 74.5279078765597
_GetPrimeFactors: False 0.366806395784939
180 20730797
_primzahlcheck: False 44.3841326202073
_GetPrimeFactors: False 0.503136571826866
181 4929434
_primzahlcheck: False 17.9933483166157
_GetPrimeFactors: False 0.268749240476094
182 96216992
_primzahlcheck: False 89.9281891972304
_GetPrimeFactors: False 0.398374653761861
183 60062921
_primzahlcheck: False 60.2881092429345
_GetPrimeFactors: False 0.406755607207061
184 72708624
_primzahlcheck: False 71.1671455450344
_GetPrimeFactors: False 0.365130205095899
185 68696155
_primzahlcheck: False 69.8619517285018
_GetPrimeFactors: False 0.425193704786502
186 49265333
_primzahlcheck: False 61.3502554095562
_GetPrimeFactors: False 0.443631802365943
187 49790996
_primzahlcheck: False 60.5305981626156
_GetPrimeFactors: False 0.365688935325579
188 54727465
_primzahlcheck: False 57.3698612533157
_GetPrimeFactors: False 0.344177821482898
189 72177117
_primzahlcheck: False 70.8590058233658
_GetPrimeFactors: False 0.359822267913939
190 30275120
_primzahlcheck: False 43.3454531232321
_GetPrimeFactors: False 0.308698451898216
191 28280524
_primzahlcheck: False 46.7553837149694
_GetPrimeFactors: False 0.327136549477657
192 65527652
_primzahlcheck: False 64.7456590153218
_GetPrimeFactors: False 0.360380998143619
193 97676986
_primzahlcheck: False 82.226372346206
_GetPrimeFactors: False 0.372114332966899
194 64817915
_primzahlcheck: False 71.3168852465886
_GetPrimeFactors: False 0.421841323408422
195 34675402
_primzahlcheck: False 46.4081328772232
_GetPrimeFactors: False 0.339987344760298
196 33803948
_primzahlcheck: False 50.1600063695246
_GetPrimeFactors: False 0.348088933090658
197 79828926
_primzahlcheck: False 72.7734949553644
_GetPrimeFactors: False 0.393066716579901
198 11938970
_primzahlcheck: False 169.191894500558
_GetPrimeFactors: False 0.406196876977381
199 12549308
_primzahlcheck: False 31.9507088191376
_GetPrimeFactors: False 0.324901628558937
200 6183450
_primzahlcheck: False 18.9510119302872
_GetPrimeFactors: False 0.211479391933891
Durchscnitt Func _primzahlcheck: 57.2571821278961
Durchscnitt Func _GetPrimeFactors: 2.45747993110856
Alles anzeigen