Nein, denn DriveGetLabel() bringt keine oder nicht dieselbe Bezeichnung, wie in der Registry abgelegt.
Bei all meinen Sticks (6: MicroX, PConKey etc.) bekomme ich mit DriveGetLabel() keine Information.
Beiträge von BugFix
-
-
Hi,
mit der Funktion _GetMountedUSB_Drives() lassen sich für alle USB-Sticks (und alle als "removable" angemeldeten USB-Festplatten) Laufwerksbuchstabe und Bezeichnung zurückgeben.
Das steht natürlich nie zusammen in der Registry, sondern kann nur über 3 Abfragen zugeordnet werden ;).Spoiler anzeigen
[autoit];===============================================================================
[/autoit]
;
; Function Name: _GetMountedUSB_Drives
; Description:: Ermittelt aktuell gemountete USB-Laufwerke
; Parameter(s): None
; Requirement(s): #include <string.au3>
; Return Value(s): 2D-Array
; Array[0][0] = Anzahl gemounteter USB-Laufwerke
; Array[n][0] = Laufwerk - Buchstabe
; Array[n][1] = Bezeichnung
; Note: Erkennt alle gemounteten USB-Sticks,
; USB-Festplatten werden erkannt, wenn sie als "Wechseldatenträger"
; im System registriert sind.
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;
;===============================================================================
#include <string.au3>
Func _GetMountedUSB_Drives()
Local $aUSB_Drives[1][2]=[[0]]
$var = DriveGetDrive( "Removable" )
For $i = 1 To UBound($var) -1
$reg = RegRead('HKLM\SYSTEM\MountedDevices', '\DosDevices\' & $var[$i])
$val = ''
For $k = 1 To StringLen($reg) - 2 Step 2
$tmp = _HexToString(StringMid($reg, $k, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
$prefix = StringSplit($val, '#')
If StringRight($prefix[3], 2) == 'RM' Then
$prefix = StringTrimRight($prefix[3], 3)
For $l= 1 to 100
$val = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR', $l)
If @error <> 0 then ExitLoop
For $n = 1 To 20
$sub = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val, $n)
If @error <> 0 then ExitLoop
If RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val & '\' & $sub, 'ParentIdPrefix') == $prefix Then
If DriveGetFileSystem($var[$i] & '\') Then
ReDim $aUSB_Drives[UBound($aUSB_Drives)+1][2]
$aUSB_Drives[0][0] += 1
$aUSB_Drives[UBound($aUSB_Drives)-1][0] = StringUpper($var[$i])
$aUSB_Drives[UBound($aUSB_Drives)-1][1] = _
RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val & '\' & $sub, 'FriendlyName')
ExitLoop
EndIf
EndIf
Next
Next
EndIf
Next
Return $aUSB_Drives
EndFunc ;_GetMountedUSB_Drives -
Hi,
[autoit]
es kann durchaus passieren (warum weiß ich auch nicht ;)), dass:If FileExists(@MyDocumentsDir)
[/autoit]ein anderes Ergebnis liefert als
[autoit]$path = @MyDocumentsDir
[/autoit]
If FileExists($path)
Möglicherweise ist die Makro-Auflösung innerhalb eines Funktionsaufrufes nicht immer zuverlässig. -
krass seit wann machst du das????
Mit AutoIt arbeite ich seit Ende 2005. Mit Programmierung ganz allgemein schon seit mehr als 20 Jahren 
Naja - meinen Namenszusatz habe ich auch nicht ganz umsonst, wie du auch an den Fkt. in meiner Sig. siehst.
-
Grundlegender Tipp für UDF: Versuche solche Funktionen zu verwenden, dass du keine Includes verwenden mußt.
Bsp. Statt _ArrayAdd() das Array mit ReDim verändern.Hier mal meine Lösung (nur aus dem Kopf, ungetestet), Rückgabe Array. An Array[0] wird die Anzahl der Zeichen zurückgegeben. Jedes folgende Arrayelement enthält eine gefundene Position in der Schreibart: "Dateizeile,Spalte"
Spoiler anzeigen
[autoit]Func _GetPosOfChar($FILE, $CHAR=' ')
[/autoit]
If Not FileExists($FILE) Then Return MsgBox(0, '', 'keine gültige Datei')
Local $arOut[1]=[0]
Local $i = 1
While 1
$tmp = FileReadLine($FILE, $i)
If @error Then ExitLoop
$var = StringSplit($tmp, '')
If Not @error Then
For $k = 1 To UBound($var)-1
If $var[$k] == $CHAR Then
ReDim $arOut[UBound($arOut)+1]
$arOut[UBound($arOut)-1] = $i & ',' & $k
$arOut[0] += 1
EndIf
Next
EndIf
$i += 1
WEnd
Return $arOut
EndFunc -
Es ist sehr umständlich und langsam.
[autoit]
Du hattest doch danach schonmal in der Shoutbox gefragt, oder?
Zumindest kann ich mich an den Tipp von Xeno erinnern, ich habe es hier mal umgesetzt:Func _CountChar($FILE, $CHAR=' ')
[/autoit]
If Not FileExists($FILE) Then Return MsgBox(0, '', 'keine gültige Datei')
Local $fh = FileOpen($FILE, 0)
Local $var = StringReplace(FileRead($fh), $CHAR, $CHAR)
Local $count = @extended
FileClose($fh)
Return $count
EndFunc -
Ich falle sicher etwas aus der Rolle ;), da ich die Meinung vertrete, dass von "allein" nichts auf meinen PC gelangt. Ich muß schon eine "Einladung" aussprechen.
Also ich verwende nur Hardwarefirewall (Router) und so etwa 1-mal im Jahr scanne ich (erfolglos) nach Viren und mache einen Check mit HijackThis.
Wer allerdings keinen Router verwendet (gibts das noch?) sollte schon alle Ports dicht machen, dann kommt man auch nicht um eine Softwarefirewall umhin. Aber ich kann nicht behaupten, dass es da etwas wirklich empfehlenswertes gibt. Symantec-Produkte schaffen mehr Probleme als sie evtl. verhindern (Erfahrung von mir und Bekanntenkreis)
und letztendlich ist der "Schutz" hauptsächlich psychologischer Natur.
Der beste Schutz ist dein Kopf - überleg vor jedem Klick, vor dem Öffnen jeder Mail, ob das auch sicher ist. -
Hi,
ich habe beim Reviewen bemerkt, dass teilweise recht ungeeignete Wörterbücher/Übersetzungstools herangezogen werden und häufig dann ausgerechnet die gesuchte Übersetzung wohl nicht dabei ist.
Hier mal ein Tipp von mir, für ein Wörterbuch, das mich noch nie im Stich gelassen hat: LingoPad.
-
Stimmt, das Problem ist aber von Windoof hausgemacht. Warum werden überhaupt Ordner- und Dateinamen mit Leerzeichen vom System zugelassen? Das ist doch voll krank!
Und somit werden wir immer wieder auf Probleme stoßen, wenn wir auf derartige Dateien und Ordner stoßen. -
-
Also die Einwahl machst du zu kompliziert :).
Ich habe hier das Bsp. anhand der FritzBox 7141, aber die Menüoberfläche ist bei den FB eigentlich gleich:Spoiler anzeigen
[autoit]#include <ie.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $pass = 'PASSWORT'
Global $oIE = _IECreate('http://fritz.box/')
_WaitMenu()
Global $oFrame = _IEFrameGetCollection ($oIE, 0)
Global $oForm = _IEFormGetCollection($oFrame, 1) ; Referenz auf "uiViewForm"
Global $oPass = _IEFormElementGetCollection($oForm, 0) ; Referenz auf PW-Eingabe
Global $oBtnLogin = _IEFormElementGetCollection($oForm, 1) ; Referenz auf 'Anmelden' Button_IEFormElementSetValue($oPass, $pass)
[/autoit] [autoit][/autoit] [autoit]
_IEAction($oBtnLogin, 'click')
_WaitMenu()Func _WaitMenu()
[/autoit]
$n = 0
Do
Sleep(200)
$txt = _IEPropertyGet($oIE, "statustext")
If $txt = 'Fertig' Then $n += 1
Until $n = 2
Sleep(1500)
EndFunc
Jetzt bist du auf der Menüseite, dort werden zwar Java-Scripte aufgerufen - aber auf den ersten Blick würde ich sagen das ist Tabellenformat. Ich schau es mir mal näher an. Wenn ich Zugriff finde poste ich es.Edit: Da der IE bei jeder Einwahl unterschiedliches Zeitverhalten hat, habe ich mal noch eine Warteroutine eingefügt, damit das Objekt auch sicher geladen ist. Allein die Statusmeldung 'Fertig' reicht dafür leider nicht, da Fertig nür für die zu ladenden Komponenten gilt. Evtl. auszuführende Java-Scripte werden anscheinend nicht berücksichtigt.
-
Ach dein Firefox heißt "Penner" -

Naja, bischen langsam ist der Fuchs ja.
-
Dann schmiert dein PC ab, weil du 100.000 Instanzen von Firefox startest

-
Und was soll in der Endlosschleife passieren? Worauf wartet diese, was ist das Abbruchkriterium?
[autoit]
*Kristallkugel-reib*
Eine Endlosschleife ist z.B.While 1
[/autoit]
; irgendwas oder auch nix
WEnd -
Ja, für Standard-Controls kannst du die UDF-Func nicht immer verwenden.
-
Zitat
schon mal an einen pdf-writer gedacht ?
Man, der Kerl hat schon wieder Recht - richtig unheimlich
Ich habe z.B. auf meinem Schlepptop PDFCreator als Standard-Drucker und bei allen Geschäftsabwicklungen übers Internet, "drucke" ich entsprechende Seiten als PDF-File aus.
-
Wo der ExBerliner Recht hat, hat er Recht :).
Ich hoffe ihr könnt bei einem alten Mann etwas Nachsicht üben.
-
Ich versteh nicht, warum du Strasse und Stadt in unterschiedlichen Arrays führen willst. Zusammengehörige Daten sollten auch zusammen gespeichert werden.
Wenn du einzelne Arraydaten anzeigen möchtest, mußt du die Elemente einzeln ansprechen.
[autoit]For $i = 0 To UBound($array) -1
[/autoit]
MsgBox(0, '', 'Wert an Position ' & $i & ': ' & $array[$i])
Next
[autoit]
Ein 2D-Array mit 2 Spalten gibst du so wieder:For $i = 0 To UBound($array) -1
[/autoit]
MsgBox(0, '', 'Wert an Position ' & $i & ', Spalte 1: ' & $array[$i][0] & @CRLF & _
'Wert an Position ' & $i & ', Spalte 2: ' & $array[$i][1])
NextHilfe zu Arrays findest du hier
-
Irgendwo ein Schreibfehler?
Ich hatte zum Test ein Array erstellt, also nach dem Schritt _FileReadToArray() begonnen.
Da klappte es tadellos.Hier mal mein funktionierendes Muster:
Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
Dim $aRecords[4] = [ _
0, _
'BLA/KAT1/Firma1/Strasse1/Ort1 Bemerkung1 * zeit *', _
'BLUB/KAT2/Firma2/Strasse2/Ort2 Bemerkung2 * zeit *', _
'BLI/KAT3/Firma3/Strasse3/Ort3 Bemerkung3 * zeit *']
Dim $var
;~ If Not _FileReadToArray("test.txt",$aRecords) Then Exit MsgBox(4096,"Fehler", "Konnte Datei nicht in Array einlesen! error: " & @error)
;~ Dim $aAdresse[$aRecords[0]][2]
Dim $aAdresse[3][2]For $i = 1 To UBound($aRecords) -1
[/autoit]
$var = StringSplit($aRecords[$i], '/')
If Not @error Then
$aAdresse[$i-1][0] = $var[4] ; Strasse
$aAdresse[$i-1][1] = StringTrimRight($var[5], StringLen($var[5])-StringInStr($var[5], '*')+1 ) ; Ort + Bemerkung
EndIf
Next
_ArrayDisplay($aAdresse) -
Mit
[autoit]_GUICtrlListBox_SetCaretIndex ($hListBox, $Index_des_Eintrags)
[/autoit]Für diese Dinge benötigst du zwingend die GUIListBox.au3 - Funktionen.