Die Funktionen wurden dir benannt, jetzt ist es an dir anzufangen.
Kommst du dann nicht weiter, kannst du uns deinen Code posten und wir werden dir weiterhelfen.
Aber mach erst mal den Anfang ;).
Beiträge von BugFix
-
-
Ich hatte mal ein Array-Tutorial gemacht, findest du hier.
-
Hi,
sicher nichts großes - aber von Zeit zu Zeit recht nützlich :D.
Mit _RegReadBinary($KEY, $VALUE [, $Bin2Str=1]) wird ein Registryschlüssel vom Typ REG_BINARY ausgelesen und in einen String gewandelt zurückgegeben (wahlweise auch binäre Rückgabe).
Die Syntax und Fehlermeldungen sind analog zur Funktion RegRead().Edit 26.12.2009:
- Angepaßt an aktuelle AutoItversion.
- Fehlerausgabe geändert (1 und @error-Wert)
- Schlüssel die nicht vom Typ REG_BINARY sind werden normal gelesenSpoiler anzeigen
[autoit];===============================================================================
[/autoit]
; Function Name...._RegReadBinary($KEY, $VALUE [, $Bin2Str=1])
; Description......Liest einen Registryschlüssel aus
; Schlüssel vom Typ REG_BINARY können wahlweise als
; ASCII-String zurückgegeben werden.
; Parameter(s).....$KEY Registryschlüssel
; $VALUE Registrywert
; $Bin2Str 0 = Value wird normal gelesen
; 1 = Binärwert wird in ASCII-String gewandelt (Standard)
; Return Value(s)..Erfolg: der Registrywert
; Fehler: 1 set @error:
; 1 Schlüssel kann nicht geöffnet werden
; 2 Hauptschlüssel kann nicht geöffnet werden
; 3 Fernzugriff auf die Registry nicht möglich
; 4 Key oder Value nicht übergeben
; -1 Wert kann nicht geöffnet werden
; -2 Typ des Wertes wird nicht unterstützt
; Author(s)........BugFix ([email='bugfix@autoit.de'][/email])
; AutoIt ver.......3.3.2.0
;===============================================================================
Func _RegReadBinary($KEY, $VALUE, $Bin2Str=1)
If $KEY = '' Or $VALUE = '' Then Return SetError(4,0,1)
If $Bin2Str <> 1 Then $Bin2Str = 0
Local $reg = RegRead($KEY, $VALUE)
Local $err = @error, $ext = @extended
If $err Then Return SetError($err,0,1)
If $ext <> 3 Or $Bin2Str = 0 Then Return $reg
Local $val = ''
$reg = StringTrimLeft($reg, 2)
For $i = 1 To StringLen($reg) - 2 Step 2
$tmp = BinaryToString('0x' & StringMid($reg, $i, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
Return $val
EndFunc ;==>_RegReadBinaryDL bisher: 46
-
Zeichenkettenverknüpfung in AutoIt mit "&".
[autoit]
Bsp.$var = 'BlaBla'
[/autoit]
$var = $var & 'Blub'
; neuer Wert von $var jetzt: 'BlaBlaBlub' -
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. -
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.