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

Beiträge von Oscar

  • @scriptdir schlägt nach Wechsel des Laufwerksbuchstabens (in laufender exe) fehl

    • Oscar
    • 14. März 2013 um 17:48

    Ich würde anders vorgehen und dem Stick einen Namen (Label) geben. Dann kann man vor der Installation den aktuellen Laufwerksbuchstaben auslesen:

    Spoiler anzeigen
    [autoit]


    ConsoleWrite(_Label2Drive('USB-Stick') & @CR)

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

    Func _Label2Drive($sLabel)
    Local $aDrives = DriveGetDrive('REMOVABLE')
    If @error Then Return SetError(@error, 0, '')
    For $i = 1 To $aDrives[0]
    If $sLabel = DriveGetLabel($aDrives[$i]) Then Return SetError(0, 0, $aDrives[$i])
    Next
    Return SetError(1, 0, 'Not available')
    EndFunc

    [/autoit]
  • [UDF ArrayEx] Benutzerdefinierte Funktionen für Arrays

    • Oscar
    • 13. März 2013 um 07:08

    Also diese Funktion:

    [autoit]


    Func _ArrayExCompare($aArray1, $aArray2)

    EndFunc

    [/autoit]


    hat bestimmt eine superkurze Laufzeit. Nur schade, dass sie nicht funktioniert. :D

    Spass beiseite: Die UDF ist ja sicher gut gedacht, aber ohne jegliche Funktionsbeschreibung werden nur wenige etwas damit anfangen können.
    Die Beispiele sind jetzt auch nicht so aussagekräftig. Schau Dir mal die anderen UDFs an. Kommentare sind dringend notwendig.

  • Hilfe für einen Anfänger beim automatischen Umschreiben/Umformatieren von Textdateien (Bildkoordinaten usw.)

    • Oscar
    • 5. März 2013 um 12:53

    Da fehlte ein Punkt und $10 gibt es nicht. Das geht nur von $1...$9.
    Aber so geht es:

    Spoiler anzeigen
    [autoit]


    $sFilename = FileOpenDialog('Bitte Textdatei zum konvertieren auswählen', @ScriptDir, 'Text (*.*)', 1)
    If @error Then Exit ;
    $sText = FileRead($sFilename) ;
    $sText = StringRegExpReplace($sText, '.{10}(.{6}) (.{3}) (.{3})(.)(.+?) (.{3})(.)(.+?) (".*")', ' $4$7$1 $2 3$3$4$5 $6$7$8 $9 ')
    $sNewFilename = StringRegExpReplace($sFilename, '(.+)\.*', '$1_m3.cst') ;
    $hFile = FileOpen($sNewFilename, 2) ;
    If $hFile <> -1 Then ;
    FileWrite($hFile, $sText) ;
    FileClose($hFile) ;
    EndIf

    [/autoit]

    P.S.: Zum einfügen von AutoIt-Code bitte den AutoIt-Tag im Editor benutzen und bei längeren Quelltexten zusätzlich den Spoiler verwenden.

  • $SES_PASSWORD Text zeigen aber nicht das Passwort?

    • Oscar
    • 4. März 2013 um 12:40

    x0r: dann ist es ja ein permanentes Passwordfeld. Das ist ja gerade nicht erwünscht.

  • $SES_PASSWORD Text zeigen aber nicht das Passwort?

    • Oscar
    • 4. März 2013 um 12:34

    Das Problem hatte ich auch schonmal. Das Inputfeld kann man mit GUICtrlSetStyle später nicht in ein Passwordfeld "umwandeln".
    Es funktioniert aber mit GUICtrlSendMsg (siehe unten):

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>

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

    $sPWText = "Ihr Passwort..."

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

    $hGUI = GUICreate("Test", 250, 250)
    $idInput = GUICtrlCreateInput($sPWText, 50, 120, 150, 20)
    GUISetState()

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

    $bWritePW = False

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case -3
    Exit
    EndSwitch

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

    If GUICtrlRead($idInput) <> $sPWText Then
    If Not $bWritePW Then
    ;~ GUICtrlSetStyle($idInput, $ES_PASSWORD)
    GUICtrlSendMsg($idInput, $EM_SETPASSWORDCHAR, Asc('*'), 0)
    GUICtrlSetData($idInput, StringReplace(GUICtrlRead($idInput), $sPWText, ""))
    $bWritePW = True
    EndIf
    EndIf
    WEnd

    [/autoit]
  • Hilfe für einen Anfänger beim automatischen Umschreiben/Umformatieren von Textdateien (Bildkoordinaten usw.)

    • Oscar
    • 1. März 2013 um 19:56

    Ich habe Dir die Zeile mal kommentiert (vielleicht hilft das beim verstehen):

    [autoit]


    $sText = StringRegExpReplace($sText, '.{10}(\d{6}) (.{3})(.)(.+?) (.{3})(.)(.+?) (.+?)', ' $3$6$1 $2$3$4 $5$6$7 $8') ; die Formatierung ändern

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

    ; das Pattern gruppiert den String (pro Zeile)
    ; ".{10}" = 10 beliebige Zeichen, ohne Klammer, weil nicht benötigt
    ; "(\d{6})" = 6 Ziffern -> $1 in dem Ersetzungsstring
    ; "(.3)" = 3 beliebige Zeichen -> $2 in dem Ersetzungsstring
    ; "(.)" = 1 beliebiges Zeichen -> $3 in dem Ersetzungsstring
    ; "(.+?)" = 1 oder mehr beliebige Zeichen bis zum nächsten (wegen dem ?) Leerzeichen -> $4 in dem Ersetzungsstring
    ; "(.{3})" = 3 beliebige Zeichen -> $5 in dem Ersetzungsstring
    ; "(.)" = 1 beliebiges Zeichen -> $6 in dem Ersetzungsstring
    ; "(.+?)" = 1 oder mehr beliebige Zeichen bis zum nächsten (wegen dem ?) Leerzeichen -> $7 in dem Ersetzungsstring
    ; "(.+?)" = 1 oder mehr beliebige Zeichen bis zum nächsten (wegen dem ?) Leerzeichen -> $8 in dem Ersetzungsstring

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

    ; Im Ersetzungsstring kann man dann die Gruppen beliebig zusammensetzen, hier mit entsprechenden Leerzeichen dazwischen

    [/autoit]
  • Text aus Bild auslesen - Kein Captchacode !!!

    • Oscar
    • 28. Februar 2013 um 18:05

    Es wird ihm wohl um OCR gehen. Das hatten wir schon einige Male hier im Forum diskutiert (Google-Suche: "ocr site:https://autoit.de/www.autoit.de" dürfte genügend Treffer bringen).

  • Singleton funktioniert nicht :(

    • Oscar
    • 28. Februar 2013 um 17:42

    veronesi: Ok, Du hast recht. Das war mir (bisher) nicht bekannt.

    WhiteLion: Beschreib mal genauer, wie Du testest. Ist das ein regulärer Rechner oder eine VM? Ich hatte bisher noch nie Probleme mit _Singleton (auf allen Rechnern, wo ich das bisher getestet habe).

  • Hilfe für einen Anfänger beim automatischen Umschreiben/Umformatieren von Textdateien (Bildkoordinaten usw.)

    • Oscar
    • 28. Februar 2013 um 17:32

    Bei den regulären Ausdrücken ist es sehr wichtig, wie die Formatierung aussieht und wie sie anschließend aussehen soll. Deswegen bei solchen Anfragen immer ganz genau schreiben was wie geändert werden soll und was dort möglicherweise für Zeichen stehen können.
    Für einen Anfänger sind solche reguären Ausdrücke nicht ganz einfach nachzuvollziehen (eigene Erfahrung), aber das kommt mit der Zeit.
    Hier jetzt also das geänderte Script:

    [autoit]


    $sFilename = FileOpenDialog('Bitte Textdatei zum konvertieren auswählen', @ScriptDir, 'Text (*.alt)', 1) ; Dialogbox zum auswählen der Datei
    If @error Then Exit ; wenn der Benutzer auf 'abbrechen' geklickt hat, dann Script beenden
    $sText = FileRead($sFilename) ; Datei einlesen
    $sText = StringRegExpReplace($sText, '.{10}(\d{6}) (.{3})(.)(.+?) (.{3})(.)(.+?) (.+?)', ' $3$6$1 $2$3$4 $5$6$7 $8') ; die Formatierung ändern
    $sNewFilename = StringRegExpReplace($sFilename, '(.+)\.alt', '$1.neu') ; Neuen Dateinamen generieren
    $hFile = FileOpen($sNewFilename, 2) ; Datei zum schreiben öffnen
    If $hFile <> -1 Then ; wenn erfolgreich, dann...
    FileWrite($hFile, $sText) ; neuen Text schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit]


    Ich hoffe, dass das jetzt so passt, ansonsten melde Dich einfach nochmal. :)

  • Hilfe für einen Anfänger beim automatischen Umschreiben/Umformatieren von Textdateien (Bildkoordinaten usw.)

    • Oscar
    • 27. Februar 2013 um 18:06

    Als Dateiendung soll dann ".neu" da stehen?
    Dann geht es so:

    Spoiler anzeigen
    [autoit]


    $sFilename = FileOpenDialog('Bitte Textdatei zum konvertieren auswählen', @ScriptDir, 'Text (*.alt)', 1) ; Dialogbox zum auswählen der Datei
    If @error Then Exit ; wenn der Benutzer auf 'abbrechen' geklickt hat, dann Script beenden
    $sText = FileRead($sFilename) ; Datei einlesen
    $sText = StringReplace($sText, '-', '+ ') ; 1. Schritt: alle Minuszeichen in Pluszeichen mit zusätzlichem Leerzeichen
    $sText = StringRegExpReplace($sText, '(\+ ).(.).(.)', '$1$2$3') ; 2. Schritt: die Formatierung im ersten Block ändern
    $sText = StringRegExpReplace($sText, '(\+ .{6}).(.+)', '$1$2') ; 3. Schritt: die Formatierung im zweiten Block ändern
    $sNewFilename = StringRegExpReplace($sFilename, '(.+)\.alt', '$1.neu') ; Neuen Dateinamen generieren
    $hFile = FileOpen($sNewFilename, 2) ; Datei zum schreiben öffnen
    If $hFile <> -1 Then ; wenn erfolgreich, dann...
    FileWrite($hFile, $sText) ; neuen Text schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit]
  • Singleton funktioniert nicht :(

    • Oscar
    • 27. Februar 2013 um 17:27
    Zitat von veronesi

    Warum nicht mit einem einfachen Zweizeiler?

    [autoit]


    If WinExists(StringTrimRight(@ScriptName, 4) & "1") Then Exit ;Allow only one instance of this script!
    AutoItWinSetTitle(StringTrimRight(@ScriptName, 4) & "1")

    [/autoit]

    Weil nicht jedes Script auch ein Fenster öffnet. ;)
    Man sollte schon auf den Prozess prüfen. Aber ansonsten schließe ich mich name22 und AspirinJunkie an. _Singleton funktioniert sehr wohl unter Win7 64 Bit.

  • Hilfe für einen Anfänger beim automatischen Umschreiben/Umformatieren von Textdateien (Bildkoordinaten usw.)

    • Oscar
    • 27. Februar 2013 um 17:15

    Hier eine Variante mit Dateiauswahl:

    Spoiler anzeigen
    [autoit]


    $sFilename = FileOpenDialog('Bitte Textdatei zum konvertieren auswählen', @ScriptDir, 'Text (*.txt)', 1) ; Dialogbox zum auswählen der Datei
    If @error Then Exit ; wenn der Benutzer auf 'abbrechen' geklickt hat, dann Script beenden
    $sText = FileRead($sFilename) ; Datei einlesen
    $sText = StringReplace($sText, '-', '+ ') ; 1. Schritt: alle Minuszeichen in Pluszeichen mit zusätzlichem Leerzeichen
    $sText = StringRegExpReplace($sText, '(\+ ).(.).(.)', '$1$2$3') ; 2. Schritt: die Formatierung im ersten Block ändern
    $sText = StringRegExpReplace($sText, '(\+ .{6}).(.+)', '$1$2') ; 3. Schritt: die Formatierung im zweiten Block ändern
    $sNewFilename = StringRegExpReplace($sFilename, '(.+)(\.txt)', '$1_neu$2') ; Neuen Dateinamen generieren
    $hFile = FileOpen($sNewFilename, 2) ; Datei zum schreiben öffnen
    If $hFile <> -1 Then ; wenn erfolgreich, dann...
    FileWrite($hFile, $sText) ; neuen Text schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit]
  • Hilfe für einen Anfänger beim automatischen Umschreiben/Umformatieren von Textdateien (Bildkoordinaten usw.)

    • Oscar
    • 26. Februar 2013 um 18:39

    So ein umkonvertieren geht doch recht problemlos. Einlesen, etwas mit StringReplace bzw. StringRegExReplace hantieren und dann wieder schreiben.
    Das sind nur ein paar Zeilen:

    [autoit]


    $sText = FileRead(@ScriptDir & '\test.txt')
    $sText = StringReplace($sText, '-', '+ ') ; 1. Schritt: alle Minuszeichen in Pluszeichen mit zusätzlichem Leerzeichen
    $sText = StringRegExpReplace($sText, '(\+ ).(.).(.)', '$1$2$3') ; 2. Schritt: die Formatierung im ersten Block ändern
    $sText = StringRegExpReplace($sText, '(\+ .{6}).(.+)', '$1$2') ; 3. Schritt: die Formatierung im zweiten Block ändern
    $hFile = FileOpen(@ScriptDir & '\text_neu.txt', 2) ; Datei "text_neu.txt" zum schreiben öffnen
    If $hFile <> -1 Then ; wenn erfolgreich, dann...
    FileWrite($hFile, $sText) ; neuen Text schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit]
  • Aufgabe für die Regexer ;)

    • Oscar
    • 25. Februar 2013 um 09:39

    Auch wenn Du es schon gelöst hast, ich würde folgende Variante benutzen:

    [autoit]


    #include <Array.au3>
    $sText = FileRead(@ScriptDir & '\test.txt')
    $array = StringRegExp($sText, 'vertex (\H+) (\H+) (\H+)', 3)
    _ArrayDisplay($array)

    [/autoit]


    Dann hast Du gleich alle Einträge getrennt im Array und benötigst nicht extra noch ein StringSplit.

  • warum geht das fenster immer zu

    • Oscar
    • 14. Februar 2013 um 20:22

    Und außerdem wird mit Opt('GUIOnEventMode', 1) der OnEventMode eingeschaltet und trotzdem gibt es eine MessageLoop-Schleife (und kein einziges GUICtlrSetOnEvent).
    Du timyboy solltest Dich mal für einen Modus entscheiden.

  • FTP-Datei Upload Problem !

    • Oscar
    • 14. Februar 2013 um 17:20

    butter: Wenn ein Thema gelöst ist, dann bitte nicht den Beitrag löschen, sondern das Thema als gelöst markieren. Ich habe das jetzt mal für Dich getan.

  • RegEnumKey bringt eigenariges Ergebnis

    • Oscar
    • 10. Februar 2013 um 17:41

    Der "Fehler" liegt daran, dass Du beim RegEdit die 64Bit-Werte angezeigt bekommst und AutoIt die 32Bit-Werte anzeigt.
    Du musst also entweder beim RegEdit unter "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node" nachsehen oder bei AutoIt die Zeile #AutoIt3Wrapper_UseX64=y an den Anfang des Scripts schreiben:

    [autoit]


    #AutoIt3Wrapper_UseX64=y

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

    For $i = 1 To 10
    $var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)
    If @error <> 0 Then ExitLoop
    MsgBox(4096, "SubKey #" & $i & " under HKLM\Software: ", $var)
    Next

    [/autoit]
  • Unterschied (Switch case) (If Then endif)

    • Oscar
    • 10. Februar 2013 um 17:28

    Was ist daran kompliziert? Die Funktion "_ChangeSlider" wird aufgerufen, sobald der Slider bewegt wird. Dazu registriert man (mit GUIRegisterMsg) den Event ($WM_HSCROLL) und gibt die Funktion an, die aufgerufen werden soll und muss dann gar nicht mehr selbst abfragen, ob der Slider bewegt wurde.

  • Unterschied (Switch case) (If Then endif)

    • Oscar
    • 9. Februar 2013 um 16:37

    Ich würde es so machen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 623, 138, 192, 114)
    $Label1 = GUICtrlCreateLabel("Label1", 216, 16, 36, 17)
    $Slider1 = GUICtrlCreateSlider(56, 48, 481, 20)
    GUICtrlSetLimit(-1, 100, 0)
    GUIRegisterMsg($WM_HSCROLL, "_ChangeSlider")
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ChangeSlider($hWnd, $Msg, $wParam, $lParam)
    GUICtrlSetData($Label1, GUICtrlRead($Slider1))
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_ChangeSlider

    [/autoit]
  • Stoppuhr

    • Oscar
    • 8. Februar 2013 um 20:33

    Klasse! Ich hab's noch etwas erweitert und den Pausen-Bug beseitigt. Jetzt bin ich ganz zufrieden. Ich danke Dir! :thumbup:
    Neue Version in Post #1.

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™