x- Zeichen vor und nach einem Text löschen, Frage zu Tray Menü und frage zum einmaligem Ausführen

  • Hi!

    Ich hab gleich 3 Fragen^^
    Fang ich einfach mal an:
    1.)

    Also in meinem kleinen Programm lese ich mit

    [autoit]

    $Text = _IEBodyReadText ($oIE)

    [/autoit]


    einen Text von einer Internetseite aus. Der Text ist zum Beispiel:

    Heute ist Montag, 5:10 Uhr

    Wenn ich jetzt eine MsgBox erstelle mit

    [autoit]

    MsgBox(64, "Der Tag heute ist", $Text)

    [/autoit]

    wird mir der komplette Text angezeigt.
    also:

    [autoit]

    MsgBox(64, "Der Tag heute ist", Heute ist Montag, 5:10 Uhr)

    [/autoit]


    Ist es Möglich, dass ich 10 Zeichen in dem Text von vorne lösche und dann nochmal ab Zeichen 16 alle weiteren Zeichen? Also dass ich nur den Abschnitt Montag von Zeile 11-16 bekome? in der MsgBox müsste dann stehen:

    [autoit]

    MsgBox(64, "Der Tag heute ist", Montag)

    [/autoit]

    2.)

    Ich habe dieses ganz normale Tray Menü:

    Spoiler anzeigen
    [autoit]

    #Include <Constants.au3>
    #NoTrayIcon

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

    Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.

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

    $prefsitem = TrayCreateItem("Preferences")
    TrayCreateItem("")
    $aboutitem = TrayCreateItem("About")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")

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

    TraySetState()

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

    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $prefsitem
    Msgbox(64, "Preferences:", "OS:" & @OSVersion)
    Case $msg = $aboutitem
    Msgbox(64, "About:", "AutoIt3-Tray-sample.")
    Case $msg = $exititem
    ExitLoop
    EndSelect
    WEnd

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

    Exit

    [/autoit]

    Kann ich es so machen, dass per Doppelklick

    [autoit]

    Msgbox(64, "Preferences:", "OS:" & @OSVersion)

    [/autoit]

    aufgerufen wird und per ganz normalem Rechtsklick nur das Tray Menü?
    Gut wäre noch, dass im Tray Menü der erste Punkt

    [autoit]

    $prefsitem

    [/autoit]

    Fett dargestellt würde. (habs mit setfont und DEFBUTTON versucht, ging aber iwie nicht richtig)

    3.)
    Kann ich einstellen, dass mein kompiliertes Script als .exe nur einmal ausgeführt werden darf?


    Ich hoffe ihr könnt mir bei meinen Fragen helfen =)

    mfg Henry

    Einmal editiert, zuletzt von Henry (15. Juni 2009 um 21:54)

  • 1.
    StringTrimLeft ;)

    2.
    kA

    3.
    öhm iwo im forum gabs mal sowas, also ne udf danach konntest die exe nur 1 mal starten ich guck mal ob ich es finde falls ja verlinke ich es.

    mfg
    K1773R

  • Hallo Henry,

    zu 1) schau dir mal die Funktionen zu Zeichenketten und Strings an, speziell StringRight, StringMid, StringLeft (ich weiss dass es schönere Lösungen gibt, aber damit kommst du auch zum Ziel) die 2. Möglichkeit hierzu wäre mit StringSplit

    [autoit]

    $adatum = StringSplit("Heute ist Montag, 5:10 Uhr",",")
    $aDatum = StringSplit($Datum[1]," ")
    MsgBox(0,"Heute ist:",$aDatum[3])

    [/autoit]


    zu 2) kA
    zu 3) ja schau dir Singleton an:

    [autoit]

    $sTitel = "Meine GUI" ;<==== mit dem Fensternamen deiner Anwendung tauschen
    If _Singleton($sTitel, 1) = 0 Then
    MsgBox(64, $sTitel, $sTitel & ' ist bereits gestartet',5)
    Exit
    EndIf

    [/autoit]


    alles hier im Forum online erstellt also austesten,

    mfg (Auto)Bert

  • ah, das funktioniert gut mit "StringTrimLeft", danke =)

    Jetzt ist es aber so, dass der Text am Anfang immer unterschiedlich lang ist.

    Beispieltext 1)
    Gestern war Sonntag. - Heute ist Montag, 5:10 Uhr

    Beispieltext 2)
    Gestern war Donnerstag. - Heute ist Freitag, 10:15 Uhr

    Im oberen Beispiel könnte man 23 Zeichen von Links wegstreichen, wenn man den Text ab Heute haben möchte
    Im unterem Beispiel muss man aber 26 Zeichen von Links wegstreichen, wenn man den Text ab Heute haben möchte.

    Meine Lösungsidee:

    Suche bis das Zeichen " - ". Zähle bis dahin die Zeilen. Setze bei fund $zeilenanzahl auf die Anzahl der gezählten Zeilen
    und dann mache: StringTrimLeft($text, $zeilenanzahl)

    Kann man das irgendwie realisieren ?

    mfg Henry

    PS: Das mit _singleton funktioniert auch =)

  • Hallo Henry,

    hab gerade erst bemerkt, dass sich in meinem 1. Post ein Tippfehler bei StringSplit eingeschlichen hat. So sollte es aussehen:

    [autoit]

    $adatum = StringSplit("Heute ist Montag, 19:59 Uhr",",")
    $aDatum = StringSplit($aDatum[1]," ")
    MsgBox(0,"Heute ist:",$aDatum[3])

    [/autoit]
  • ah, jetzt gehts.

    Ich guck mal, ob ich das so integrieren kann wie ich es mir vorstelle =)

    melde mich dann

  • Hallo Henry,

    nach dem sich immer noch kein Spezialist für reguläre Ausdrücke gefunden hat, da ist sowas ein Einzeiler, aber ich hab da noch kA
    naocheinmal StringSplit jetzt für #4,

    [autoit]

    ;#include <Array.au3>
    $adatum = StringSplit("Gestern war Sonntag. - Heute ist Montag, 20:45 Uhr" , "- ",1)
    ;_ArrayDisplay($aDatum,"2 Teile ewartet")
    $adatum = StringSplit($aDatum[2],",")
    ;_ArrayDisplay($aDatum,"2 Teile ewartet")
    $aDatum = StringSplit($aDatum[1]," ")
    ;_ArrayDisplay($aDatum,"2 Teile ewartet")
    MsgBox(0,"Heute ist ",$aDatum[3])

    [/autoit]

    wenn du alle Semikolons entfernst, verstehst du die Art und Weise besser warum ich ein bestimmtes Feld einsetze,

    mfg (Auto)Bert