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

Beiträge von teh_hahn

  • Run mal wieder

    • teh_hahn
    • 14. April 2008 um 14:33

    Hi,

    ich blick es grade nicht, vielleicht sieht einer von Euch den Fehler. Ich möchte mittels cacls Berechtigungen für den System Volume Information-Ordner ändern:

    Folgender Aufruffunktioniert einwandfrei unter Windows

    Code
    C:\WINNT\system32\cmd.exe /c "cacls "D:\System Volume Information" /t /e /c /g [USERNAME]:F"


    obgleich ich bisher immer der Meinung war, das Anführungszeichen innerhalb von Anführungszeichen mittels "\" maskiert werden müssen. Jetzt will ich das Ganze aus AutoIt heraus mittels Run ausführen:

    [autoit]

    RunWait(@ComSpec & ' /c "cacls "' & $S_SVI & '" /t /e /c /g ' & @UserName & ':F"', "", @SW_HIDE)

    [/autoit]


    Hierbei schmeißt der Run-Befehl aber einen Error! Trotzdem klappt es!? Was ist denn da los? Habs nochmal mit Maskierung versucht, aber das geht gar nicht?

    Bug, oder was? Überseh ich was? oO

  • guten morgen

    • teh_hahn
    • 8. April 2008 um 08:09

    Hi, versuch es mal mit einem Sleep, denn ansonsten ist es so korrekt:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

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

    HotKeySet("{ESC}", "HotKeyExit")

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

    main()

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

    Func main()
    WinWaitActive("xxxxx")
    While 1
    PixelSearch(258, 106, 910, 664, 0xFF1418)
    If @error Then
    Send("{TAB}")
    Sleep(250)
    Send("2")
    EndIf
    WEnd
    EndFunc ;==>main

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

    Func HotKeyExit()
    Exit
    EndFunc ;==>HotKeyExit

    [/autoit]

    Mehrfach W senden kannst Du so (Hilfe!!!):

    [autoit]

    Send("{W 4}")

    [/autoit]
  • msg bestätigen falls eine erscheint

    • teh_hahn
    • 7. April 2008 um 14:33

    Das wird durch die AutoIt-Option WinTitleMatchMode definiert (Hilfe bemühen)! Du musst natürlich auch noch die ControlID bei ControlClick anpassen! Am Besten zum Testen zwischendurch mit MsgBoxen debuggen!

  • msg bestätigen falls eine erscheint

    • teh_hahn
    • 7. April 2008 um 13:05

    Hi, also wenn das Standard Controls sind, erst einmal WinWait bzw. WinExists (Titel/Text auslesen mit AutoIt Window Info Tool), controls verfügen über eine ctrlID, diese mit ControlClick ansprechen - fertig!
    Beispiel:

    [autoit]

    Global Const $S_WINTITLE = "Microsoft Outlook"
    Global Const $S_WINTEXT = "Ich will weggemacht werden!"

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

    Global $i_clicked = 0
    Do
    If WinExists($S_WINTITLE, $S_WINTEXT) Then $i_clicked = ControlClick($S_WINTITLE, $S_WINTEXT, 2)
    Sleep(50)
    Until $i_clicked

    [/autoit]


    Musst Du halt modifizieren, je nach dem ob ganz klar ist, wann die MsgBox auftauchen kann! (Stichwort AdLib)

  • Zahlen eines Strings addieren

    • teh_hahn
    • 7. April 2008 um 08:21

    Ups, da wohl einer schneller. Hier trotzdem noch eine andere Lösung:

    [autoit]

    #include-once

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

    Global $s_numbers = "10bla5hugo7"
    MsgBox(64, "_StringAddDigits", _StringAddDigits($s_numbers, 0))

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

    ;===============================================================================
    ; Function Name.....: _StringAddDigits
    ; Description.......: Adds all digit (0-9) characters in a string.
    ; Version...........: 1.0
    ; Change Date.......: 2008-04-07
    ; AutoIt Version....: 3.2.10.0
    ;
    ; Parameter(s)......: $S_TEXT - The string to sum up.
    ;
    ; Requirements(s)...: None
    ; Return Value(s)...: Returns the result of the addition.
    ;
    ; Author(s).........: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: None
    ;===============================================================================
    Func _StringAddDigits(Const $S_TEXT, Const $I_FLAG = 1)
    Local $i_res = 0

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

    For $i = 1 To StringLen($S_TEXT)
    $i_res += StringMid($S_TEXT, $i, 1)
    Next

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

    Return $i_res
    EndFunc ;==>_StringAddDigits

    [/autoit]

    EDIT: Danke schön, wurde gefixed!

  • CMD Tool bauen

    • teh_hahn
    • 5. März 2008 um 08:17

    Hi,

    sobald Du deiner EXE Parameter (also Schalter) übergibst, befinden diese sich ja im Array $cmdline, wobei $cmdline[0] die Anzahl der Parameter angibt. Einfach:

    [autoit]

    $i_param = _ArraySearch($cmdline, "SCHALTERNAME", 1)
    If $i_param <> -1 Then

    [/autoit]


    Das implementierst Du dann für jeden Schalter. Wird der Schalter nun gefunden, hast Du ja den Index des Schalters und willst dann noch auf zusätzliche Angaben prüfen, also machst Du:

    [autoit]

    $s_action = $cmdline[$i_param]

    [/autoit]


    Bei der ganzen Geschichte muss natürlich noch mittels UBounf($cmdline) bzw. $cmdline[0] überprüft werden, damit Du nicht aus dem Array "läufst"! Du könntest -s damit z.b. N Paremeter hinzufügen, indem du das zweite Beispiel in einer Schleife laufen lässt. (Je nach dem wie Du es aufbaust, musst du auch das mit dem "-" berücksichtigen um Deine Parameter zu unterscheiden, sollte aber kein Problem darstellen!

  • Dateipfad...?

    • teh_hahn
    • 21. Februar 2008 um 12:47

    Ja, die Datei existiert nicht!

    [autoit]

    Local $s_app = "C:\Programme\Adobe\PhotoshopCS\photoshop.exe"
    If Not FileExists($s_app) Then Exit (MsgBox(48, "Warning", "Die Datei existiert nicht!"))
    Run($s_app)

    [/autoit]
  • Neue Idee für µIt

    • teh_hahn
    • 21. Februar 2008 um 12:44

    Ich finde die uIt-Idee ja sehr interessant, muss aber auch anmerken, dass eine Durchführungszeit von wenigen Tagen doch ein wenig schlapp ist. Besser wäre da ungefähr 2 Wochen bis 1 Monat, weil
    1. Liest nicht jeder jeden Tag im Forum (bzw. übersieht einen solchen Thread).
    2. Hat man sicherlich noch andere Dinge außer AutoIt zu erledigen.
    3. Schreckt solch ein enges Zeitlimit von vornherein ab ("Ach, morgen schon - dann beim nächsten Mal!").
    4. Spricht auch nichts gegen eine längere Laufzeit, da der Quellcode ja vorab nicht verfügbar gestellt wird.

    Ich denke, dass das Ganze nur mit einer Teilnehmeranzahl von mindestens fünf Leuten Sinn macht! Außerdem sollte vielleicht ein Sticky für uIt angelegt werden, in dem die Regeln genauer als bisher festgelegt werden und die Aufgaben gestellt werden. (Das Posten wäre dann verboten, es würden nur Aufgaben/eingesandte Lösungen und Gewinner darin zu finden sein!)
    Dann würden sich auch die vielen Unklarheiten von vornherein ausschließen und das Ganze würde für jeden ersichtlich sein!

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 21. Februar 2008 um 12:30

    Naja, find ich nun nicht so sehr um die Ecke gedacht, mehrere Arbeitsschritte in einem zusammenzufassen. Aber da ich noch keine zeit hatte mich mit regulären Audrücken zu beschäftigen, habe ich es nun so gelöst:

    [autoit]

    #include <Array.au3>
    $s_s = "z" ;~ Der Suchstring
    $s_r = "C:\Folder|C:\Folder\FileZ.exe|C:\FolderZ\FileZZZ.txt|C:\FolderZ\123|C:\FolderZ\123\test.zzz|"
    $as_tmp = StringSplit($s_r, "|")
    $s_r = ""
    For $i = 1 To $as_tmp[0]
    If StringInStr(StringTrimLeft($as_tmp[$i], StringInStr($as_tmp[$i], "\", 0, -1)), $s_s) Then $s_r &= $as_tmp[$i] & "|"
    Next
    _ArrayDisplay(StringSplit(StringTrimRight($s_r, 1), "|"))

    [/autoit]


    Wird aber ja wahrscheinlich langsamer sein...

  • Dateipfad...?

    • teh_hahn
    • 21. Februar 2008 um 12:08

    Hi,

    ist das Programm ein DOS-Programm, dann versuch mal:

    [autoit]

    Run(@ComSpec & ' /c "C:\Programme\usw\usw\usw.exe"')

    [/autoit]


    Ansonsten könnte auch die Angabe des Arbeitsverzeichnisses helfen:

    [autoit]

    Run("C:\Programme\usw\usw\usw.exe", "C:\Programme\usw\usw")

    [/autoit]


    Bei bestimmten Dateitypen hilft auch ShellExecute!

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 20. Februar 2008 um 22:16

    Hi,
    ich muss den Thread doch noch mal aufwärmen. Hab ein weiteres kleines Problem (und zwar möchte ich jetzt in einem String nach einem oder mehreren zusammenhängenden Zeichen suchen!)
    Folgendes habe ich:

    [autoit]

    #include <Array.au3>
    $s_s = "z" ;~ Der Suchstring
    $s_r = "C:\Folder|C:\Folder\FileZ.exe|C:\FolderZ\FileZZZ.txt|C:\FolderZ\123|C:\FolderZ\123\test.zzz|"
    ;~ C:\FolderZ\123 darf nicht als Treffer gelten! Es darf immmer nur der letzte Teil ab "\" untersucht werden!
    $as_tmp = StringRegExp($s_r, "(?i)[^\|]*z*\|", 3)
    $s_r = ""
    For $i = 0 To UBound($as_tmp) - 1
    $s_r &= $as_tmp[$i]
    Next
    _ArrayDisplay(StringSplit(StringTrimRight($s_r, 1), "|"))

    [/autoit]


    Wie bekomme ich es hin, dass der String der untersucht werden soll (fängt optional mit | an und hört mit | auf) so untersucht wird, dass nur ab dem letzten \ ein Vergleich durchgeführt wird? (Siehe Comments im Quelltext!)

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 18. Februar 2008 um 16:39

    Ja, egal - Haufen drauf. Die Lösung mit dem StringRegExp funktioniert ja. Ist zwar unschön, aber das ArrayToString hat man in drei Zeilen ja auch selbst, von daher braucht man nicht mal einen include.
    Jedenfalls vielen Dank!

    Die Funktion werde ich dann demnächst posten!

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 18. Februar 2008 um 15:51

    Mhh, ja das funktioniert leider wirklich nicht. Ich muss genau auf cmd ODER bak testen. Kann man das nicht irgendwie ganz einfach negieren? einfach ne Klammer drum und ^ oder so? ^^
    Wieso kann man da denn nicht mit Groups arbeiten, wie beim exkludieren?

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 18. Februar 2008 um 14:03

    Ja, fast. Ich möchte das ganze aber nicht als Array zurück bekommen. Geht es denn nicht einfacher so wie beim exkludieren? Sonst hat man ja bei z.B. fünf filtern einen extrem langen String. Irgendwie versteh ich das Pattern auch nicht (Ist doch zweimal das gleiche, bloß einmal mit "|" vorne dran und einmal ohne! Ich hatte an so etwas gedacht:

    [autoit]

    #include <Array.au3>
    $s_r = "FileList.cmd|FileList.bak|TestApp.CMD|list.txt|Virus.exe|backup.CMD|listold.txt|blablubb.bak|"
    MsgBox(64, "Exclude", StringRegExpReplace($s_r, "(?i)[^\|]*\.(cmd|exe)\|", ""))
    MsgBox(64, "Include", StringRegExpReplace($s_r, "(?i)[^\|]*\.(^cmd|^exe)\|", ""))
    _ArrayDisplay(StringRegExp($s_r, "(?i)[^\|]*\.cmd|[^\|]*\.exe", 3)) ;~ Das funktioniert zwar, finde ich aber unschön!!!

    [/autoit]


    Ich weiß aber nicht, wie man das korrekt ausdrückt! oder ist da eine Lösung mittels Replace nicht möglich? Ansonsten bleibt nur der Weg über das Array!

    EDIT: Siehe Quelltext!

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 18. Februar 2008 um 12:56

    Hi,

    ich bin grade dabei mir eine FileSearch-Funktion zu bauen (Ja, ich weiß davon gibt es so viele wie Sand am Meer, aber trotzdem!). Und für das Filtern nach Dateiendungen benötige ich dies (geht wesentlich schneller als alles andere!). Bin auch ansonsten so gut wie fertig.

    Ich weiß, dass man ^ zum negieren verwenden kann, aber wie wende ich das in diesem Fall auf die Extensions an?! Achso, dass ich mehrere rausfiltere, habe ich bereits hinbekommen, aber nun will google mir nicht helfen ^^:

    [autoit]

    $s_r = "FileList.cmd|FileList.bak|TestApp.CMD|list.txt|Virus.exe|backup.CMD|"
    MsgBox(64, "", StringRegExpReplace($s_r, "(?i)[^\|]*\.(cmd|exe)\|", ""))

    [/autoit]


    Ist doch die einfachste Methode, oder?
    Also nun nur noch die Möglichkeit, dass NUR die CMD- und EXE-Dateien zurück gegeben werden und ich bin glücklich!

    Wenn die Funktion fertig ist, werde ich sie hier selbstverständlich posten!

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 17. Februar 2008 um 18:44

    Hi,
    erstmal danke Xeno!
    das Pattern passte doch noch nicht ganz! Und zwar wurde nicht erkannt, wenn die erste Datei vor dem "|" eine *.cmd war.
    Die Änderung auf:

    [autoit]

    StringRegExpReplace($s_r, "(?i)[^\|]*\.cmd\|", "")

    [/autoit]


    brachte dann jedoch das gewünschte Ergebnis!

    Nun würde ich aber auch gerne mehrere Dateiendungen filtern. Das geht ja z.B. mit:

    [autoit]

    StringRegExpReplace($s_r, "(?i)[^\|]*\.cmd\||[^\|]*\.bak\|", "")

    [/autoit]


    Lässt sich das vielleicht auch noch vereinfachen? Irgendwie mit "cmd|bak" oder Ähnlichem?

    Außerdem wüsste ich gerne, ob sich das ganze auch negieren lässt. Soll heißen ich möchte NUR die Dateien zurück erhalten, die eine *.exe oder *.bak sind!
    Hier nochmal das Beispiel:

    [autoit]

    $s_r = "FileList.cmd|FileList.bak|TestApp.CMD|list.txt|Virus.exe|backup.CMD|"
    MsgBox(64, "", StringRegExpReplace($s_r, "(?i)[^\|]*\.cmd\|", ""))
    MsgBox(64, "", StringRegExpReplace($s_r, "(?i)[^\|]*\.cmd\||[^\|]*\.bak\|", ""))

    [/autoit]
  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 15. Februar 2008 um 21:15

    He, he. Ich wollte mir mal bei Gelegenheit ein Tutorial dazu durchlesen! Kannst Du mir da vielleicht eines empfehlen (Hilfe ist da ja doch etwas dünn!)?

    Auf jeden Fall vielen Dank für das Pattern!
    So, auf ins Wochenende!

    EDIT: Muss aber case-insensitive sein, also:

    [autoit]

    StringRegExpReplace($s_r, "(?i)\|[^\|]*\.cmd", "")

    [/autoit]
  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 15. Februar 2008 um 21:01

    Hi!

    Danke schon einmal. Aber das klappt noch nicht ganz (bin leider nicht sehr bewandert mit RegExp!):

    [autoit]

    Local $s_r = "abriss.exe|^°!'das.cmd|meister.txt|sdadsa.cmd|dsasdas.txt|dsadsa.cmd|"
    MsgBox(64, "", StringRegExpReplace($s_r, "(?<=\|).*?.cmd\|", ""))

    [/autoit]
  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 15. Februar 2008 um 20:28

    Korrekt, Xeno!

  • RegExp Frage bezüglich Zeichen

    • teh_hahn
    • 15. Februar 2008 um 20:22

    Ach ja,
    da hätte ich wohl die Frage etwas genauer stellen sollen. Der Dateiname, kann natürlich auch anders sein, z.B. SuperTyp.cmd oder 123458ichkannnedzählen.cmd oder, oder, oder. Also sämtliche Zeichen! Ich weiß bloß nicht, wie man das ausdrückt in RegExp! interessant ist eigentlich nur:

    Code
    [[:alnum:]]


    Dafür brauche ich einen Ausdruck, der alle Zeichen (bzw. alle Zeichen, die ein Dateiname haben kann - die wollte ich nicht alle rausfriemeln, da es bestimmt einfacher geht) entfernt!

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™