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

Beiträge von Scritch

  • Stringprobleme mit _ArraySearch()

    • Scritch
    • 18. September 2012 um 13:08

    Auf welche Größe sind die Strings mit den man arbeiten darf, bei _ArraySearch() begrenzt? Dürfen Sonderzeichen und Umlaute in den Strings enthalten sein?

  • Maximale Zeichenanzahl in einem Arrayfeld

    • Scritch
    • 24. August 2012 um 11:48

    Ja, das auszuwerten ist in der Tat furchtbar. Die Datei stammt direkt aus der Microsoft Registry aus der Exportieren-Funktion. Da kann man auch das Dateiformat .txt halt auswählen.

    Jetzt wo ich das hier schreibe und gerade nochmal in den Code geschaut habe, gebe ich dir natürlich Recht. Anfängerfehler. Wie du richtig gesehen hast, werte ich immer nur die 3 Zeilen aus, obwohl die Daten auch in Zeile 4, 5, 6,... stehen. Blöder Fehler :pinch:

    Aber dann hast du mir jetzt doch noch geholfen, ih n zu finden. Dafür danke ich dir :)

    Mal schauen ob er dann den ganzen binären Krams auch richtig auswertet.

    Edit: Aber um das nochmal zu klären: Wie groß darf ein Array Datenfeld maximal sein?

  • Maximale Zeichenanzahl in einem Arrayfeld

    • Scritch
    • 24. August 2012 um 11:05

    Mit Typumwandlungen arbeite ich nicht. Hier mal mein Skript, ist vom umfang noch überschaubar. Daten werden wie gesagt aus einer Textdatei ins Array eingelesen und auch ohne große Umwandlungen weiter verarbeitet.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Reg_vorher = @ScriptDir & "\reg_vorher.txt"
    Global $aReg_vorher ;Pure eingelesene Registry in eine 1D-Array

    [/autoit] [autoit][/autoit] [autoit]

    dim $aAufteilung[2][4] ;Schlüsselname|Klassenname|Letzter schreibzugriff
    _filereadtoarray($Reg_vorher, $aReg_vorher)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    for $i = 0 to UBound($aReg_vorher) - 1
    if StringInStr($aReg_vorher[$i], "Schlüsselname") > 0 Then
    redim $aAufteilung[ubound($aAufteilung) + 1][ubound($aAufteilung, 2)]
    $aAufteilung[ubound($aAufteilung) - 1][0] = StringMid($aReg_vorher[$i], 15) ;Schlüsselname
    $aAufteilung[ubound($aAufteilung) - 1][1] = Stringmid($aReg_vorher[$i + 1], 13) ;Klassenname
    $aAufteilung[ubound($aAufteilung) - 1][2] = Stringmid($aReg_vorher[$i + 2], 24) ;Letzter Schreibzugriff
    ElseIf StringInStr($aReg_vorher[$i], "Wert") > 0 Then
    $Werthoehe = StringMid($aReg_vorher[$i], 5)
    if $Werthoehe = 0 Then
    $aAufteilung[ubound($aAufteilung) - 1][3] = $aReg_vorher[$i + 1] & $aReg_vorher[$i + 2] & $aReg_vorher[$i + 3]
    Else
    if ubound($aAufteilung, 2) >= (4 + $Werthoehe) Then
    $aAufteilung[ubound($aAufteilung) - 1][3 + $Werthoehe] = $aReg_vorher[$i + 1] & $aReg_vorher[$i + 2] & $aReg_vorher[$i + 3]
    Else
    ReDim $aAufteilung[ubound($aAufteilung)][4 + $Werthoehe] ;vorher prüfen, ob array schon groß genug
    $aAufteilung[ubound($aAufteilung) - 1][(3 + $Werthoehe)] = $aReg_vorher[$i + 1] & $aReg_vorher[$i + 2] & $aReg_vorher[$i + 3]
    EndIf
    EndIf
    EndIf
    Next
    _arraydisplay($aAufteilung)

    [/autoit]

    Edit: Hier habt ihr nochmal eine abgespeckte Datei von der Registry, wo man das nachstellen kann:

    Dateien

    reg_vorher.txt 226,78 kB – 386 Downloads
  • Maximale Zeichenanzahl in einem Arrayfeld

    • Scritch
    • 24. August 2012 um 09:47

    Ich weiss gerade nicht, wie ich das als Minibeispiel darstellen soll. Ich versuche es nochmal zu erklären:
    Es geht wieder darum, die Registry auf Änderungen hin auszuwerten. Dabei hat man dann Inhalte von den Datenfeldern (die Registry wird aus einer Textdatei in ein Array eingelesen) wie diese hier:

    Spoiler anzeigen

    Schlüsselname: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 2\SCSI Bus 0\Target Id 0\Logical Unit Id 0
    Klassenname: <KEINE KLASSE>
    Letzter Schreibzugriff: 14.08.2012 - 08:04
    Wert 0
    Name: Type
    Typ: REG_SZ
    Daten: CdRomPeripheral

    Wert 1
    Name: DeviceType
    Typ: REG_SZ
    Daten: CdRomPeripheral

    Wert 2
    Name: Identifier
    Typ: REG_SZ
    Daten: MagicISOVirtual DVD-ROM 1.0A

    Wert 3
    Name: InquiryData
    Typ: REG_BINARY
    Daten:
    00000000 05 80 02 02 20 00 00 10 - 4d 61 67 69 63 49 53 4f .... ...MagicISO
    00000010 56 69 72 74 75 61 6c 20 - 44 56 44 2d 52 4f 4d 20 Virtual DVD-ROM
    00000020 31 2e 30 41 1.0A

    Wert 4
    Name: DeviceName
    Typ: REG_SZ
    Daten: CdRom1


    Genau so steht es in der Textdatei. Und so wie es in der Textdatei steht, will ich es auch auswerten. Ich wollte diesen String jetzt teilen in verschiedene Strings und das in ein anderes Array schreiben. Schlüsselname, Klassenname und Letzter Schreibzugriff jeweils in eine Spalte und danach dann die Inhalte der jeweiligen Werte je in eine Spalte. Aber da scheiterts. Name und Typ werden korrekt geschrieben. Die Daten jedoch nicht. Hinter Daten steht dann später gar nichts.

  • Maximale Zeichenanzahl in einem Arrayfeld

    • Scritch
    • 24. August 2012 um 09:18

    Hallo. Nachdem ich ja norlich schonmal Probleme mit der generellen Größe eines Arrays hatte, habe ich nun Probleme mit der Inhaltsgröße eines Datenfeldes. Ich habe einen binären inhalt mit 84.000 Zeichen. Im _ArrayDisplay wird das nicht angezeigt. Bzw. generell keine Zeichenfolgen wie diese hier:

    Spoiler anzeigen

    00000000 00 00 00 00 00 00 00 00 - 01 00 00 00 02 00 00 00 ................

    Wie kann das sein?

  • Registry: Vorher, Nachher Vergleich

    • Scritch
    • 16. August 2012 um 09:23

    Das ist so von mir gedacht, dass das ganze dann in einem Array stehen wird, welches dann nur in eine Datei geschrieben wird. Ich brauche das ganze eigentlich auch nur um ein schon vorhandenes Skript zu erweitern.

  • Arraylimit von 65.530 übersteigen

    • Scritch
    • 15. August 2012 um 11:29
    Zitat von misterspeed

    Die neue Methode ist aber in der Tat deutlich flotter, nur was nutzt einem das, wenn die Hälfte des Arrays nicht angezeigt wird... :rolleyes:

    Schön wärs :) Bei mir werden gerade etwas mehr als 2% des Arrays angezeigt bei 65k Einträgen.

    Ich werde es dann einfach in die Konsole ausgeben lassen :)

  • Registry: Vorher, Nachher Vergleich

    • Scritch
    • 15. August 2012 um 11:23
    Zitat von CyRoX

    Benutze doch einfach schon vorhandene Software, z.B. ERUNT oder Regshot.
    Sollte ziemlich gut damit (erst recht mit letzterem) funktionieren. ;)

    Prinzipiell kein Problem, mit zusätzlicher Software. Ist aber immer nicht so gern gesehen bei uns im unternehmen für jede Kleinigkeit weiter Software zu benutzen. AutoIt benutzen wir schon in vielen Fällen und es wäre toll, wenn man dabei bleiben könnte :) Ich werde mir das dennoch mal anschauen, danke dir :)

  • Arraylimit von 65.530 übersteigen

    • Scritch
    • 14. August 2012 um 13:56
    Zitat von misterspeed

    Hatte das ganze bei mit unter Vista 64bit aber auch als 32bit Anwendung erfolgeich getestet, also vllt eher ein Limit von XP bzgl. Listviews?
    Letzten Endes für dein vorhaben aber irrelevant, denn es ist ja nicht notwendig die komplette Registry per arraydisplay darzustellen, es langt ja die unterschiede beider Arrays zu ermitteln und anzuzeigen.


    Da hast du Recht, für mein Projekt irrelevant :) _ArrayDisplay ist aber für die Kontrolle bisher trotzdem immer ganz nett gewesen.

  • Arraylimit von 65.530 übersteigen

    • Scritch
    • 14. August 2012 um 13:15
    Zitat von AspirinJunkie

    Wo hast du denn diese Grenze von 65530 her?
    Es ist bei mir problemlos möglich 3.000.000 Array-Elemente zu erstellen und auch zu nutzen:

    [autoit]

    Global $a_Test[3000000]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $a_Test[2999999] = "Test"
    ConsoleWrite($a_Test[2999999] & @CRLF)

    [/autoit]

    Du hast Recht, das Anzeigen von Elementen aus Spalten jenseits der 65.530 funktioniert. Scheint wirklich die max. Grenze von _ArrayDisplay sein unter einem 32Bit OS.

  • Registry: Vorher, Nachher Vergleich

    • Scritch
    • 14. August 2012 um 13:13
    Zitat von misterspeed

    Klar kann man. Das Limit bezieht sich auf Controls, ein Listview ist genau 1 Control. Aber beim testen eben ist mir aufgefallen, dass große Arrays extrem viel Arbeitsspeicher bei der Listviewerstellung fressen. Das kann dann ggf. auch mit dem maximal addressierbaren Arbeitsspeichers von 32bit Anwendungen kollidieren.

    Ok, dann kollidierts mit meinem 32 Bit OS :)

  • Registry: Vorher, Nachher Vergleich

    • Scritch
    • 14. August 2012 um 12:33

    Naja, vll. hat _ArrayDisplay auch eine Begrenzung?

    [autoit]

    #include <array.au3>
    dim $aTest[1000000]
    _arraydisplay($atest)

    [/autoit]


    Da zeigt er mir nur 65.530 Datenfelder an, in der ersten Dimension.

  • Arraylimit von 65.530 übersteigen

    • Scritch
    • 14. August 2012 um 12:25

    Hallo. Ich möchte ein Array erstellen welches mehr Einträge beinhaltet als es bisher vorgesehen ist. Derzeitige Größe ~3.000.000. Ist das irgendwie machbar?

  • Registry: Vorher, Nachher Vergleich

    • Scritch
    • 14. August 2012 um 12:16
    Zitat von Alina

    Du kannst doch die Registry speichern.

    Schlagwort wäre: bevor & after

    Speichere erst die Registry unter "bevor", dann z. B. Programm installieren und dann die Registry speichern unter "after".
    Hast Du das gemacht, vergleiche beide Dateien und die Unterschiede läßt Du in eine Datei schreiben. Mit der richtigen Endlung kannst Du es sogar so machen, das die neuen Einträge, wenn Du sie z. B. manuell löscht, durch anklicken wieder in die Registry einspielst.
    Aber sei vorsichtig, denn die Registry ist das Herzstück jedes Windowscomputers.

    Wie das geht mit in Datei speichern und vergleichen, findest Du alles bereits im Forum und ind er Hilfe.

    Ja, das ist ja auch mein Plan. Aber ich bekomme ja nichtmal die komplette Datei in ein Array für die Bearbeitung, da bei Arrays bei 65.530 Einträgen Schluss ist. Es scheitert also schon am Anfang. 2.961.601 Einträge sollte es eigentlich haben :-O

  • Registry: Vorher, Nachher Vergleich

    • Scritch
    • 14. August 2012 um 10:26

    Hallo. Ich möchte gerne ein Tool haben/selber bauen welches die Registry in zwei verschiedenen Zuständen vergleicht und mir Diferenzen auflistet. Ich erfasse z. B. vor der Installation eines Programmes den Zustand, also sämtliche Inhalte der Registry. Dann installiere ich mein gewünschtes. Danach möchte ich halt gerne sehen was sich in der Registry geändert hat.
    Kennt da jemand was? Ich weiss nicht ob das mit AutoIt realisierbar wäre. Theoretisch würde es ja gehen. Die Registry exportieren in eine Textdatei, jeweis vorher und nachher. Und dann einfach die einzelnen Zeilen miteinander vergleichen. Tja, theoretisch. Praktisch sind das aber 180MB an reinen Text, was nicht mal eben verarbeitet werden kann. Über eine Million an Zeilen.

  • Druckereigenschaften über AutoIt ändern

    • Scritch
    • 3. August 2012 um 10:19

    Kann mir keiner helfen? ;(

  • Druckereigenschaften über AutoIt ändern

    • Scritch
    • 24. Juli 2012 um 12:08

    Hallo. Ich hatte mir vor einiger Zeit für unsere Firma ein Script geschrieben um bei Usern ohne Adminrechte auch Drucker installieren zu können, ohne dass er sich abmelden muss. Das klappte bisher auch ganz gut und zufriedenstellend. Hier ein kleiner wesentlicher Ausschnitt aus dem Script:

    Spoiler anzeigen
    [autoit]

    Func Combo2()
    $read = GUICtrlRead($Combo2)
    DirCreate($driver_path)
    While 2
    If $read = "Service" Then
    Global $treiberexe = "E350.exe"
    Global $treibername = $driver_path & "LMAAL2DA.INF"
    Global $druckername = "Lexmark E352dn PS3"
    Global $druckerport = "nwd-service"
    FileInstall("./E350.exe", $driver_path & $treiberexe, 1)
    ExitLoop
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    installdriver($read, $treiberexe, $treibername, $druckername, $druckerport)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func installdriver($read, $treiberexe, $treibername, $druckername, $druckerport)
    Global $driver_path = @ScriptDir & "\tmp\"
    Global $print_vbs = $driver_path & "vbs.exe"
    Global $driver_x86 = $treiberexe
    Global $driver_inf = $treibername
    Global $driver_current = $druckername
    Global $driver_old = $druckername
    Global $print_port = $druckerport
    Global $script_v = FileGetVersion(@ScriptFullPath)
    Global $driver
    Global $driver_processor
    Global $driver_typ

    FileInstall("./vbs.exe", $PRINT_VBS, 1)
    $driver = $driver_path & $driver_x86
    $driver_processor = "Intel"

    ;Entpacke den Treiber an die vordefinierte Stelle
    ShellExecuteWait($driver, '-d"' & $driver_path & '" -s2')
    ;Entpacke die VBS's an die vordefinierte Stelle
    ShellExecuteWait($print_vbs, '-d"' & $driver_path & '" -s1')
    RunWait('cscript "' & $driver_path & 'prnport.vbs" -a -r ' & $print_port & ' -h ' & $print_port & ' -o raw -n 9100', $driver_path, @SW_HIDE)
    RunWait("rundll32 printui.dll,PrintUIEntry /if /b " & '"' & $druckername & '"' & " /f " & '"' & $driver_inf & '"' & " /r " & '"' & $print_port & '"' & ' /m ' & '"' & $driver_current & '"')
    ;RunWait('rundll32 printui.dll,PrintUIEntry /if /b "Lexmark T430 PS" /f "' & $driver_inf & '" /r "' & $print_port & '" /m "' & $driver_current & '"')
    sleep(1000)
    Run(@ComSpec & " /c " & "rundll32 printui.dll,PrintUIEntry /Xs /n " & '"' & $druckername & '"' & " printername " & '"' & $read & '"', "", @SW_HIDE);Benennt den gerade installierten Drucker so um, damit man ihn besser erkennen kann
    _GUICtrlListBox_AddString($cList, $read);Fügt den neuen Drucker in der Liste in der GUI hinzu
    GUICtrlSetData($statuslabel, "Der Drucker " & $read & " wurde erfolgreich installiert")
    DirRemove($driver_path, 1)
    EndFunc

    [/autoit]


    Nun haben wir aber auch andere Drucker und damit auch andere Treiber bekommen. Wir verwenden nun nur noch Universaltreiber. Nach der Installation dieser Treiber muss man aber noch händisch die einzelnen Funktionen des Druckers im Druckertreiber zuordnen. Das geht wieder nur unter der Adminkennung. Meine Frage nun an euch ist, ob so Konfigurationen wie das Hinzufügen einer Duplexeinheit (ich sage dem Treiber quasi dass der Drucker duplex drucken kann) auch über AutoIt machbar ist?

    Wahrscheinlich ist das ja nur ein zusätzlicher Parameter der gesetzt werden muss.

    Und noch etwas: Wir haben hier parallel sowohl als auch Drucker mit USB-Anschluss bei uns im Einsatz. Die Treiberinstallation funktion über meine Methode nur mit Paralleldruckern. Wie kann ich auch Drucker mit USB-Anschluss auf diese Art und Weise installieren?

  • Gesichtserkennung

    • Scritch
    • 3. April 2012 um 13:32

    Das bezweifle ich nicht, dass das von hand auch zügig "von der Hand" geht. Sicherlich ist das für 10, 20, 30 Fotos auch kein Aufwand, wenn man erstmal den Ablauf dafür drauf hat. Wenn es nachher aber doch einge Bilder mehr werden (genaue Zahl kann ich nicht sagen), wäre es doch schön, wenn man einen Automatismus drin hätte.
    Das ganze mit AutoIt zu ergänzen wäre natürlich auch eine feine Sache!

  • Gesichtserkennung

    • Scritch
    • 3. April 2012 um 10:51

    Danke für deine Antwort. Stimmt, an so Profisoftware habe ich gar nicht gedacht. Nunja, habe gerade mal geschaut, aber ich dachte Photoshop wäre teurer. Kostet ja "nur" um und bei 80€. Was für Plugins wären da denn noch nötig? Und was meinst du mit halbautomatisch? Halbautomatisch kann ich das auch mit Paint, die gesichter mit der Ausschneidenfunktion ausschneiden :D
    Solche semiprofessionellen, kostenlosen Programme wie Gimp haben das nicht drauf? Mir geht es halt darum, dass ich nicht jedes Gesicht einzelnd ausschneide möchte. Ist es ausserdem möglich gesichtserkennung zu machen bei Gesichtern auf Fotos, die nur von der Seite zu erkennen sind?

    Ich glaube das entwickelt sich doch eher in Richtung Offtopic hier. Mag den Thread ein Mod mal bitte verschieben?

  • Gesichtserkennung

    • Scritch
    • 3. April 2012 um 10:37

    Hallo. Ich möchte mir ein Skript bauen, dass auf Fotos gesichter erkennt, diese ausschneidet und dann das ausgeschnittene Bild in einer .jpg speichert. Dabei sollte wirklich nur das Gesicht und die Haare später ausgegeben werden, also sämtliche Dinge die vll. noch ansatzweise im Hintergrund zu sehen sind, sollten weiß sein. Ich bin mir dessen bewusst, dass das nicht ganz einfach zu bewerkstelligen ist. Ein paar Ansätze von anderen Usern habe ich bereits hier gefunden. Die sind aber nicht wirklich zuende geführt wurden.

    Welches wäre der einfachste Weg den ich dafür einschlagen sollte?

    OT: Gibs evt. andere Programme die mein Vorhaben schon von haus aus so umsetzen können?

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™