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

Beiträge von Friesel

  • Wechsel zwischen geöffneten Fenstern

    • Friesel
    • 25. Mai 2013 um 15:10

    Den Begriff "single Touch" kannte ich so noch nicht.
    Ich dachte, das bedeutet, dass nur eine Taste auf einmal abgefragt werden kann (bzw. Rückmeldung der Projektion), daher mein Ansatz mit den Hotkeys, weil das halt mit einzelnen Tastendrücken funktioniert und ohne Kombinationen wie ALT-TAB auskommt...

  • FileSaveDialog Problem

    • Friesel
    • 25. Mai 2013 um 14:52
    Zitat von VinceA
    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, "TEST")

    [/autoit]


    Dir ist aber schon klar, dass die Dateiendung mit angegeben werden muss?

    also so:

    [autoit]

    $save = FileSaveDialog("Save File", @DesktopDir, "Config(*.cfg)", 16, "TEST.cfg")

    [/autoit]


    Falls du das nur bei deinem Beispiel vergessen hast, endschuldige ich mich für meine "Erbsenzählerei"... :D

  • WorkingDir eines laufenden Programms ändern

    • Friesel
    • 25. Mai 2013 um 05:27

    Ich gehe mal davon aus, dass du keinen Zugriff auf den Sourcecode des besagten Programmes hast, bzw. dass es kein AutoIT Programm ist.
    Du könntest mal versuchen, den umgekehrten Weg deines Denkansatzes zu gehen, indem du mit AutoIT bestimmte Verzeichnisse auf Veränderung überwachen läßt.
    Schau dir mal diesen Beitrag von AspirinJunkie an.

    Du kannst dir auch die Source des Programms ansehn, dass ich unten angehängt habe.
    Damit ist es möglich, mehrere Verzeichnisse gleichzeitig zu überwachen.
    Den Code habe ich aus dem englischen AutoIT Forum. Musste mal dort suchen, für nähere Infos :rolleyes:

    Dateien

    Monitor_Directory.au3 11,03 kB – 215 Downloads
  • Vorzeitiges Verlassen einer Funktion/Schleife mit Return - Guter Programmierstil oder nicht?

    • Friesel
    • 23. Mai 2013 um 23:26
    Zitat von James1337

    In diesem Fall wäre Switch definitiv die elegantere Lösung.
    Außerdem solltest du Return benutzen um Werte zu übertragen und keine globalen Variablen ändern, oder zumindest nur in seltenen Fällen. (Das sollte bei dir eigentlich sowieso nicht funktionieren, da $satz außerhalb der Funktionen als lokal deklariert wurde, diese somit eigentlich keinen Zugriff darauf haben sollten.)


    Das Skript oben ist getestet und funktioniert einwandfrei :)
    Aber das sollte ja, wie gesagt, nur als Beispiel dienen. In meinem konreten "Problem" mit FileInstall ging es auch nicht darum, Variablen zu ändern, sondern darum, unterschiedliche Einspung- bzw. Aussprungpunkte zu erstellen.

    Zitat von James1337

    Ich würde auch lieber das mit if und return nehmen. Switch ist nur bei entweder-oder Auswahlen wirklich sinnvoll, bei aufeinanderfolgenden Abfragen wird if verwendet.
    Mit Switch könnte man das auch so lösen: (unübersichtlich)

    Spoiler anzeigen
    [autoit]

    Func _Switch($eject)
    Local $satz = ""
    Switch $eject
    Case 3
    $satz = " nun doch"
    ContinueCase
    Case 2
    $satz = " Satz, der"&$satz
    ContinueCase
    Case 1
    $satz = " ein unvollständiger"&$satz
    ContinueCase
    Case 0
    $satz = "Dies ist"&$satz

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

    Case Else
    $satz = "Dies ist ein unvollständiger Satz, der nun doch vollständig ist."
    EndSwitch
    Return $satz
    EndFunc

    [/autoit]
    Alles anzeigen


    Das der Code hässlich ist, sehe sogar ich :rofl:

    Zitat von James1337

    Bei den if-abfragen muss jedes Mal der Wert der Variable neu ausgelesen werden und dafür muss in der Liste aller Variablen nachgeschlagen werden, welcher Wert dazu gehört steht.
    Bei Switch wird der Wert einmal bestimmt und dann nur noch verglichen.


    Verstanden und verinnerlicht, danke!

    Zitat von chesstiger

    Local außerhalb einer Funktion -> Global. ^^


    Verstanden und verinnerlicht, danke!
    Aber, ums nochmals zu betonen, bei mir gings nicht um Variablen, sondern um Aussprungspunkte...

  • Vorzeitiges Verlassen einer Funktion/Schleife mit Return - Guter Programmierstil oder nicht?

    • Friesel
    • 23. Mai 2013 um 21:16

    Erstmal danke für die rege Beteiligung :thumbup:

    Meiner Meinung nach ist in dem konkreten Beispiel oben und auch bei meinem Programm mit FileInstall der Vorteil, dass man nach dem Return nur den Code hinzufügen muß, der neu ist und nicht wie bei Switch/Case jedesmal den gesamten Code wiederholen muß...

    Also sollte man eurer Meinung nach, den Code lieber mehrmals wiederholen (pro Case Anweisung) als nur den Neuen hinzuzufügen?

    Zitat von name22

    Zu deiner zweiten Frage: In diesem Fall ist die zweite Variante mit "Switch" nicht nur (meiner Meinung nach) sauberer, sondern auch geringfügig schneller.


    Hast du das gemessen oder weiß man sowas einfach?

  • Vorzeitiges Verlassen einer Funktion/Schleife mit Return - Guter Programmierstil oder nicht?

    • Friesel
    • 23. Mai 2013 um 20:45

    Schönen guten Tag, allerseits.

    Da ich noch Anfänger bin, habe ich eine grundsätzliche Frage zur Programmierung:
    Ich erinnere mich noch, daß man den GOTO-Befehl aus vielen Programmiersprache gestrichen hat, weil dessen Benutzung als äußerst unsauber galt.
    Nun sehe ich aber immer wieder in diversen Skrpts, dass dort "Return" benutzt wird, um eine Funktion/Schleife vorzeitig zu verlassen. Ist das nicht auch einfach nur ein "getarnter" GOTO-Befehl?

    Konkret stellte sich für mich das Problem, dass ich eine Funktion in einem Programm habe, die von unterschiedlichen Stellen aufgerufen wird und je nach Aufruf "unterschiedlich weit" durchlaufen werden soll.
    Noch konkreter: Wenn man das Programm per Doppelklick auf die exe startet, sollen per "FileInstall" 10 Dateien entpackt werden. Wird das programm aber mit einem Argument gestartet (Rechtsklick aus dem Kontextmenü), sollen nur die ersten 3 Dateien aus der Liste entpackt werden.

    Hier mal ein allgemeines Beispiel, um zu zeigen, was ich meine:

    Spoiler anzeigen
    [autoit]

    ;==> Benutzung von "Return"
    For $i = 0 to 3
    Local $satz = ""
    _Return($i)
    MsgBox(0, "_Return(" & $i & ")", $satz)
    Next
    _Return(1234) ;==> Bei Aufruf mit beliebigem Argument läuft die Schleife bis zum Ende durch
    MsgBox(0, "_Return(1234)", $satz)

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

    ;==> Das Gleiche mit "Switch"
    For $i = 0 to 3
    Local $satz = ""
    _Switch($i)
    MsgBox(0, "_Switch(" & $i & ")", $satz)
    Next
    _Switch(1234) ;==> beliebiges Argument
    MsgBox(0, "_Switch(1234)", $satz)

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

    Exit

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

    Func _Return($eject)
    $satz = "Dies ist "
    If $eject = 0 Then Return

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

    $satz &= "ein unvollständiger "
    If $eject = 1 Then Return

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

    $satz &= "Satz, der "
    If $eject = 2 Then Return

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

    $satz &= "nun doch "
    If $eject = 3 Then Return

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

    $satz &= "vollständig ist."
    EndFunc

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

    Func _Switch($eject)
    Switch $eject
    Case 0
    $satz = "Dies ist"
    Case 1
    $satz = "Dies ist ein unvollständiger"
    Case 2
    $satz = "Dies ist ein unvollständiger Satz, der"
    Case 3
    $satz = "Dies ist ein unvollständiger Satz, der nun doch"
    Case Else
    $satz = "Dies ist ein unvollständiger Satz, der nun doch vollständig ist."
    EndSwitch
    EndFunc

    [/autoit]


    Was ist "sauberer"? Return oder Switch/Case?

    P.s.: Mir ist klar, dass man diese Spezielle Aufgabe auch eleganter lösen kann, aber das soll ja nur ein Beispiel sein...

  • Ordner-/Dateipfad, der hinter einem Windows-Fenster liegt, ermitteln

    • Friesel
    • 23. Mai 2013 um 19:56

    Wenn du Windows 7 hast und die Maus über ein geöffnetes Programm in der Taskleiste hältst, wird der Name des Fensters in einem Tooltip angezeigt und genau diesen kannst du abfragen.
    Um das z.B. für den Explorer nutzen zu können, mußt du allerdings in den Ordneroptionen unter "Ansicht" die Option "Vollständigen Pfad in der Titelleiste anzeigen (Nur klassisches Design)" aktivieren.
    Danach kannst du den Pfad mit WinList ermitteln.
    Mit SciTE geht das z.B. auch. Es gibt viele Programme (z.B. diverse Mediaplayer) bei denen man die Anzeige des Dateipfades in den Optionen aktivieren kann. *
    Ob bzw. wie das in Excel geht mußt du mal Google fragen...

    *das muß ich leider zurücknehmen, in den Playern, die ich installiert habe, wird nur der Dateiname und nicht der komplette Pfad angezeigt...

  • Wechsel zwischen geöffneten Fenstern

    • Friesel
    • 23. Mai 2013 um 19:17

    Hab mir meinen Skript-Schnipsel nochmal angesehen und eine deutlich komfortablere und kürzere Version erstellt:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "_Exit");==> nur zum Beenden dieses Beispiels

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

    OnAutoItExitRegister("_KeysUP");==> um sicher zu gehen, dass keine der Tasten eingerastet bleibt, egal wie das Programm beendet wird

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

    HotKeySet("{TAB}", "_TAB");==> Nach Drücken der TAB Taste wird sofort das ALT-TAB Menü aufgerufen

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

    ;HotKeySet("{RIGHT}", "_TAB");==> So gehts auch und man ist sofort auf der richtigen Taste, wenn man Links/Rechts/Oben/Unten navigieren möchte
    ;HotKeySet("{LEFT}", "_TAB");==> aber die Curser Tasten sind dauerhaft belegt
    ;HotKeySet("{UP}", "_TAB")
    ;HotKeySet("{DOWN}", "_TAB")

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

    HotKeySet("{SPACE}", "_LWIN");==> Nach Drücken der SPACE Taste wird sofort das WIN-TAB Menü aufgerufen
    ;==> Die Windows Taste selber kann man leider nicht abfangen, soweit ich weiß

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

    HotKeySet("!{ENTER}", "_KeysUP");==> ENTER wählt Fenster aus und "entrastet" TAB (!{ENTER} = Alt Taste + Enter)
    HotKeySet("#{ENTER}", "_KeysUP");==> ENTER wählt Fenster aus und "entrastet" LWIN (#{ENTER} = Windows Taste + Enter)
    HotKeySet("!{ESC}", "_KeysUP");==> Wird ESC bei eingerasteter ALT Taste nicht abgefangen, bleibt ALT aktiviert
    HotKeySet("#{ESC}", "_KeysUP");==> Wird ESC bei eingerasteter LWIN Taste nicht abgefangen, bleibt LWIN aktiviert

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

    While 1
    Sleep(5000)
    WEnd

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

    Func _TAB()
    Send("{LWINUP}")
    Send("{ALTDOWN}")
    Send("{TAB}")
    EndFunc

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

    Func _LWIN()
    Send("{ALTUP}")
    Send("{LWINDOWN}")
    Send("{TAB}")
    EndFunc

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

    Func _KeysUP()
    Send("{ALTUP}")
    Send("{LWINUP}")
    ;_Exit()
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Wechsel zwischen geöffneten Fenstern

    • Friesel
    • 23. Mai 2013 um 06:40

    Also ohne mir dein Skript näher angesehen zu haben (bin selber noch Anfänger), würde ich die Verwendung von Hotkeys empfehlen:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "_Exit");==> nur zum Beenden dieses Beispiels

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

    OnAutoItExitRegister("_KeysUP");==> um sicher zu gehen, dass keine der Tasten eingerastet bleibt, egal wie das Programm beendet wird

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

    HotKeySet("{a}", "_Alt");==> "a" drücken, um Alt Taste permanent "einzurasten"
    HotKeySet("!{ENTER}", "_AltEnter");==> Enter drücken, um Fenster zu wählen (!{ENTER} = Alt Taste + Enter)
    HotKeySet("#a", "_AltNachWin");==> falls zuerst die Windows Taste und dann die Alt Taste gedrückt wird
    HotKeySet("!{ESC}", "_Exit");==> Programm beenden, auch wenn Alt Taste "eingerastet" ist.

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

    HotKeySet("{SPACE}", "_Win");==> Space drücken, um linke Windows Taste permanent "einzurasten"
    HotKeySet("#{ENTER}", "_WinEnter");==> Enter drücken, um Fenster zu wählen (#{ENTER} = Windows Taste + Enter)
    HotKeySet("!{SPACE}", "_WinNachAlt");==> falls zuerst die Alt Taste und dann die Windows Taste gedrückt wird
    HotKeySet("#{ESC}", "_Exit");==> Programm beenden, auch wenn Windows Taste "eingerastet" ist.

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

    While 1
    Sleep(5000)
    WEnd

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

    Func _Alt();==> wenn aktiviert, einfach TAB Taste drücken (ACHTUNG: ALLE anderen Tasten werden jetzt auch mit der Alt Taste kombiniert)
    Send ("{ALTDOWN}")
    EndFunc

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

    Func _AltNachWin();==> falls vorher die Windows Taste "eingerastet" wurde
    Send("{LWINUP}")
    Send ("{ALTDOWN}")
    EndFunc

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

    Func _Win();==> wenn aktiviert, einfach TAB Taste drücken (ACHTUNG: ALLE anderen Tasten werden jetzt auch mit der linken Windows Taste kombiniert)
    Send("{LWINDOWN}")
    EndFunc

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

    Func _WinNachAlt();==> falls vorher die Alt Taste "eingerastet" wurde
    Send("{ALTUP}")
    Send("{LWINDOWN}")
    EndFunc

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

    Func _AltEnter();==> Enter drücken, um gewähltes Fenster in den Vordergrund zu holen und gleichzeitig die Alt Taste wieder "auszurasten"
    Send("{ALTUP}")
    ;_Exit()
    EndFunc

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

    Func _WinEnter();==> Enter drücken, um gewähltes Fenster in den Vordergrund zu holen und gleichzeitig die linke Windows Taste wieder "auszurasten"
    Send("{LWINUP}")
    ;_Exit()
    EndFunc

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

    Func _KeysUP();==> um sicher zu gehen, dass keine der Tasten eingerastet bleibt, egal wie das Programm beendet wird
    Send("{ALTUP}")
    Send("{LWINUP}")
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Ich habe jetzt mal Alt und Windows Taste gleichzeitig eingebaut.
    Aber aufpassen, wenn man vergißt, dass eine der Tasten noch "eingerastet" ist, kann VIEL Chaos passieren :cursing:
    Evtl. könnte man noch mit Hilfe der AdlibRegister Funktion einen Sicherheitsmechanismus einbauen, damit keine der Tasten eingerastet bleibt.
    Ausserdem könnte man noch diesen Code als seperates Programm mit z.B. einer F-Taste starten, welches nach Durchlauf der _AltEnter() bzw. _WinEnter() Funktion beendet wird (siehe Zeile 41 bzw. Zeile 46)

    *edit*
    Natürlich lässt sich das ganze auch direkt aus einem Skript mittels WinActivate und WinSetState steuern...
    Daran hatte ich garnicht mehr gedacht :wacko:

    *edit²*
    siehe unten für bessere Version...

  • AutoIT Bug? Rechenfehler? Denkfehler??? Was läuft hier schief?

    • Friesel
    • 18. Mai 2013 um 06:05

    Wow! Das war mal ne schnelle Antwort! Tausend Dank dafür 8o

    Die Koordinaten werden im richtigen Skript zwar nicht mit einer Inputbox ermittelt, aber die Funktion, die das macht, gibt tasächlich Strings aus, ohne dass mir das bewußt war...

    Dann war das mit Round ja ein echter Zufallstreffer, weil ich damit ja was Anderes erreichen wollte, als den Variablentyp zu ändern :rock:

  • AutoIT Bug? Rechenfehler? Denkfehler??? Was läuft hier schief?

    • Friesel
    • 18. Mai 2013 um 05:19

    Guten Morgen allerseits!

    In einem etwas grösseren Script muss ich X/Y Koordinaten vergleichen und entsprechend auswerten. Leider ergeben bestimmte Werte falsche Ergebnisse.
    Da es sich um Bildschirmkoordinaten handelt, sind Dezimalstellen nicht von Bedeutung. Es handelt sich nur um ganzahlige bzw gerundete Werte.
    Hier der relevante Teil:

    [autoit]

    Local $ergebnis
    Do
    $x = InputBox("X","Ergebnis der letzten Eingabe:" & @CR & @CR & $ergebnis)
    $y = InputBox("Y","Ergebnis der letzten Eingabe:" & @CR & @CR & $ergebnis)

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

    If $y > $x Then
    $ergebnis = $y & " > " & $x
    ElseIf $x > $y Then
    $ergebnis = $x & " > " & $y
    Else
    $ergebnis = $x & " = " & $y
    EndIf
    Until @error = 1 or $y = ""

    [/autoit]

    Folgende Sequenz finde ich mehr als seltsam:
    X=10, Y=100 -> 100 > 10
    X=10, Y=101 -> 101 > 10
    X=11, Y=101 -> 11 > 101 ???
    ...
    X=11, Y=109 -> 11 > 109 ???
    X=11, Y=110 -> 110 > 11

    Das gleiche passiert zB auch bei 10000 > 1000 und 1001 > 10000 usw...

    Es scheint fast so, als würde die Kommastelle der grösseren Zahl um eins nach links versetzt werden, bzw als würde nur die gleiche Anzahl der Stellen verglichen werden.
    Also 11 und 101 wird zu 11 und 10.1 bzw 11 und 101 wird zu 11 und 10.

    Fügt man in Zeile 5 folgenden Befehl ein, funktioniert das Script (zumindest soweit ich gestestet habe):

    [autoit]

    $x = Round($x, StringLen($y))

    [/autoit]


    Komplett also so:

    [autoit]

    Local $ergebnis
    Do
    $x = InputBox("X", "Ergebnis der letzten Eingabe:" & @CR & @CR & $ergebnis)
    $y = InputBox("Y", "Ergebnis der letzten Eingabe:" & @CR & @CR & $ergebnis)
    $x = Round($x, StringLen($y)) ;==> hier bekommt $x die gleiche Anzahl an Stellen wie $y --- das kann doch nicht die Lösung sein, oder?
    If $y > $x Then
    $ergebnis = $y & " > " & $x
    ElseIf $x > $y Then
    $ergebnis = $x & " > " & $y
    Else
    $ergebnis = $x & " = " & $y
    EndIf
    Until @error = 1 Or $y = ""

    [/autoit]


    Da muss es doch eine Einstellung geben, um dieses Verhalten zu umgehen...

    p.s.: Ich hoffe, ich blamiere mich jetzt hier nicht bis auf die Knochen, weil ich irgendwas vollkommen offensichtliches übersehen habe... ;(

  • Registry Schlüssel per Regex erkennen und unerwünschte Zeichen entfernen

    • Friesel
    • 16. November 2012 um 12:41

    Vielen Dank!
    Sieht ja soweit ganz gut aus, auch wenn ich eigendlich gehofft hatte, daß das irgendwie mit einem einzelnen Pattern (wie zb meinem :whistling: ) funktioniert.
    Den Code werde ich mir später genauer ansehn, jetzt habe ich leider nur wenig Zeit.
    Ein "Fehler" ist mir allerdings schon aufgefallen, denn das Leerzeichen nach dem Backslash im dritten Beispiel wird nicht entfernt ( \ SYSTEM\ ).

  • mkvmerge mit Variablen verwenden

    • Friesel
    • 16. November 2012 um 12:25

    Wenn dus dir ganz einfach machen willst, kannst du dir auch mal diese UDF ansehn:
    Path_UDF.au3

  • Registry Schlüssel per Regex erkennen und unerwünschte Zeichen entfernen

    • Friesel
    • 16. November 2012 um 11:09
    Zitat von AspirinJunkie


    Wenn man deinen Beispieltext aus den Screenshots so ansieht sollte mir das als Mensch auch gar nicht möglich sein.
    Einmal gehören dort die Wörter nach dem Leerzeichen zum Pfad, ein andermal wiederrum nicht.
    Nur mit Stringregeln lassen sich diese Fälle nicht unterscheiden.
    Poste mal einen Beispieltext in Textform (möchte das nicht abtippen) und sage gleichzeitig wie das gewünschte Endergebnis aussehen soll.
    Dann kann man mal selbst probieren.

    Erstmal danke für die Antwort :)

    Das das mit den Leerzeichen im abschließenden Verzeichnis wohl nicht möglich ist, dachte ich mir schon.
    Ich hoffte nur, daß vieleicht jemand 'nen tollen "Zaubertrick" im Ärmel hat ;)
    Aber wie ich schon geschrieben hab, ist das nicht so tragisch, wenns nicht klappt...

    Mir geht es einfach darum, Registry Links aus einer Textdatei oder einer der zahlreichen Internetseiten, die Registry Tricks veröffentlichen, zu filtern.
    Das Endergebnis soll ein kompatibler Link sein, wie er zb in exportierten Schlüsseln steht (*.reg Dateien).

    Code
    Windows Registry Editor Version 5.00
    
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
    "ClearPageFileAtShutdown"=dword:00000001


    Die umschliessenden Klammern sind egal und auch der Wert muss nicht gelesen werden, nur der eigendliche Schlüssel (auch wenns cool wäre, wenns dafür ne Lösung gäbe).
    Also z.B. von hier:
    http://digitalewelt.freenet.de/softwareos/win…70_1055218.html

    Hier mal ein relevanter Auszug aus der Seite (erster Link mit Zeilenumbruch, zweiter normal und dritter mit falsch gesetztem Leerzeichen):

    Code
    Windows XP: Brennen von CDs
    Unter „Hkey_Current_User\Software\Microsoft\Windows\
    CurrentVersion\Policies\Explorer“ deaktivieren Sie die Brennfunktion von Windows. Setzen Sie den Standard-Wert dazu auf „1“ . Das ist beispielsweise zum Schutz firmeninterner Daten sinnvoll.
    
    
    Windows XP & 2003: Systemlautsprecher
    Wen das Piepgeräusch des Systemlautsprechers nervt, deaktiviert diesen unter „Hkey_Current_User\Control Panel\Sound“, indem er den Wert „yes“ auf „no“ setzt.
    
    
    Windows NT, 2000, XP, 2003, Vista: Reboot nach Absturz
    Unter „Hkey_Local_Machine\ SYSTEM\CurrentControlSet\Control\CrashControl“ verhindern Sie mit einer Null den automatischen Neustart bei einem Windows-Absturz. Das kann bei der Fehler-Analyse sinnvoll sein.
    Alles anzeigen


    Hier die Links zu extrahieren, sollte kein Probem sein, da sie von Anführungszeichen umschlossen sind. Es gibt aber genügend andere Seiten, die das nicht so vorbildlich machen...

  • Registry Schlüssel per Regex erkennen und unerwünschte Zeichen entfernen

    • Friesel
    • 16. November 2012 um 03:11

    Hallöchen erstmal, ich bin der Neue und ich will gleich mal ein bisschen rumnerven... :D

    Wie der Titel schon sagt, habe ich ein Problem mit Regex.
    Ich möchte aus einem bliebigen String evtl. enthaltene Registry Schlüssel auslesen und weiterverarbeiten.
    In RegexBuddy habe ich auch ein funktionierendes Pattern erstellen können, aber wenn ich versuche, diesen mithilfe von StringRegExpReplace zu benutzen, klappts nicht.
    Zur Verdeutlichung, hier mal ein Screenshot:
    [Blockierte Grafik: http://i.imgur.com/ImH4s.png]
    Was ich noch nicht hinbekommen habe, ist ein Leerzeichen im abschliessenden Verzeichnis zu erkennen (z.B. HKEY_CURRENT_USER\Control Panel\Microsoft Input Devices) und Links mit Zeilenumbruch (siehe letztes Beispiel im Screenshot).
    Falls dafür jemand ne Lösung hat, wäre ich auch nicht abgeneigt :whistling:

    Das ist aber nicht so tragisch, wichtiger ist mir die Umsetzung in Autoit. Folgendes Mini-Script liefert leider nicht die erwünschten Ergebisse:

    [autoit]

    Do
    $RegKey = InputBox( "Eingabe", "Hier Registry Schlüssel einfügen:", Default, Default, 400, 130)
    $RegeXed_find = StringRegExpReplace( $RegKey, "((?i)(HK)(.+)(\\\w*))", "$1") ;==> Pattern 1
    $RegeXed_space = StringRegExpReplace( $RegKey, "(\s{0,}\\\s{0,})", "\") ;==> Pattern 2
    $RegKey = MsgBox( 5, "", "Pattern 1: " & $RegeXed_find & @CRLF & @CRLF & "Pattern 2: " & $RegeXed_space)
    Until $RegKey = 2
    Exit

    [/autoit]


    Ich vermute, mein Fehler liegt im Backreference Wert ("$1"). Dort habe ich aber alle möglichen Kombinationen versucht, z.B.:

    Code
    "$0"
    "$1$2$3$4"
    "\0"
    "\1\2\3\4"
    ...

    Auch für das Löschen von Leerzeichen vor und nach dem Backslash (\) habe ich ein Pattern erstellt, daß einwandfrei in RegexBuddy funktioniert (auch der Zeilenumbruch im letzten Beispiel wird entfernt), aber in Autoit schaff ichs nicht (Pattern 2 im Script):
    [Blockierte Grafik: http://i.imgur.com/aiLcw.png]
    Das läßt sich natürlich auch mit StringReplace bewerkstelligen, aber Regex wäre mir schon lieber...

    Habe ich irgenwo Fehler in den Pattern oder bin ich einfach nur unfähig, StringRegExpReplace richtig zu "bedienen"? ;(

    Eine weitere Frage hätte ich noch:
    Gibts eine Möglichkeit, Text mit Zeilenumbruch per Rechtsklick aus der Zwischenablage in ein Inputfeld zu bekommen?
    Das Einlesen mit ClipGet() in eine Variable und darauf folgendes Einfügen mit GUICtrlSetData klappt, Rechtsklick nicht.

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™