script bei mehreren fenstern

  • hi liebe community,

    ich lese hier schon einige zeit mit und konnte schon eine menge lernen, aber nun brauche ich hilfe :). und zwar habe ich ein script geschrieben, welches in einem fenster einen text findet und dann ein entsprechendes bild anzeigt. das klappt auch sehr gut, jedoch nur mit einem einzigen fenster. nun möchte ich aber, dass in zwei oder mehr fenstern die bilder bei allen gleichzeitig angezeigt werden, aber mein script zeigt es immer nur ein bild beim aktivierten fenster an. das ganze soll nebenbei solange laufen bis ich es beende.

    irgendwie stehe ich da auf dem schlauch und ich hoffe ich habe mich einigermaßen verständlich ausgdrückt :)

    vielen dank!

    /edit

    ja mit script ists wohl besser :)

    2 Mal editiert, zuletzt von anna.assaoui (3. Mai 2010 um 21:04)

  • Bitte setze in Zukunft

    Code
    [autoit][/autoit]

    Blöcke um deinen Code herum. ;)
    In deinem Script sind ein paar unnötige Schleifen und Abfragen drin, außerdem wird $i in deinem Script nie auf 1 gesetzt, somit hast du 2 Endlosschleifen in einander.
    Ist das wirklich dein ganzes Script?

  • ja das ist mein ganzes script... :(

    ich weiß, dass da einiges keinen sinn ergibt, habe da schon ewig dran rumprobiert und immer wieder sachen geändert, deshalb ist da noch müll drin. lässt sich trotzdem in etwa verstehen was ich eigentlich will?

    mfg

  • Zitat

    lässt sich trotzdem in etwa verstehen was ich eigentlich will?


    Mehr oder weniger :D
    Hier mal im Pseudo Code:

    [autoit]

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

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

    While 1
    $Text1 = TextAuslesen1()
    If StringInStr($Text1, $GesuchterText1) <> -1 Then BildAnzeigen1()
    $Text2 = TextAuslesen2()
    If StringInStr($Text2, $GesuchterText2) <> -1 Then BildAnzeigen2()
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • ich versuche es nochmal anhand meines scriptes zu erklären :)

    [autoit]


    HotKeySet("{ESC}", "Terminate")
    TrayTip("Running", "Hit ESC to exit", 1, 0)

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

    $active = 0
    $awt =0 ; variable für die position des fensters
    $awt2="" ;variable für den text, der aus dem control ausgelesen wird
    $awt3="" ;variable für den gesuchten text
    $nine="C:\9.jpg" ;das bild, welches angezeigt wird, wenn in dem gesuchten fenster das wort "by" gefunden wird

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

    while 1

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

    $awt2=ControlGetText("","","[CLASS:PClass; INSTANCE:2]") ;hier wird also das control ausgelesen und der text des controls in $awt2 geschoben
    $awt=WinGetPos ("") ;hier wird die position des fensters in $awt gespeichert
    $awt3 = StringRight($awt2, 2) ;in $awt3 werden die letzten 2 ziffern des control-textes gespeichert...

    if $awt3="by" Then ; ...und hier geprüft, ob es sich dabei um "by" handelt...

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

    SplashImageOn("Splash Screen", $nine,"25","40",$awt[0]+310,$awt[1]+110,1) ;...falls ja, wird das bild an der entsprechenden position des fensters angezeigt


    EndIf

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




    WEnd

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

    Func Terminate()
    Exit 0
    EndFunc

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

    ich habe noch ein bisschen aufgeräumt, ich hoffe jetzt wirds deutlicher. so funktioniert das was ich will genau bei einem fenster, also einem programm, wenn das ganze aber aber bei zwei fenstern gleichzeitig passieren soll tut sich nix.
    sorry für meine beschreibungen, ist nicht leicht, wenn man anfänger ist und versucht eine fremde sprache zu sprechen :)

  • Mit dieser Variante kannst du beliebig viele Fenster überprüfen. ;)

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "_Exit")
    TrayTip("Running", "Hit ESC to exit", 1, 0)

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

    $sImage = "C:\9.jpg"
    $iWidth = 25
    $iHeight = 40

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

    $iCount = 2 ;Anzahl der Fenster/Controls

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

    Dim $aControl[$iCount][3]
    $aControl[0][0] = "" ;Fenstertitel 1
    $aControl[0][1] = "" ;Fenstertext 1
    $aControl[0][2] = "[CLASS:PClass; INSTANCE:2]" ;Control 1
    $aControl[1][0] = "" ;Fenstertitel 2
    $aControl[1][1] = "" ;Fenstertext 2
    $aControl[1][2] = "[CLASS:PClass; INSTANCE:2]" ;Control 2
    ;usw usw je nach dem wie viele Fenster du haben willst ;)

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

    While 1
    For $i = 0 To $iCount - 1
    If ControlGetText($aControl[$i][0], $aControl[$i][1], $aControl[$i][2]) = $sSearchText Then
    $aWinPos = WinGetPos($aControl[$i][0], $aControl[$i][1])
    SplashImageOn("Splash Screen", $sImage, $iWidth, $iHeight, $aWinPos[0] + 310, $aWinPos[1] + 110, 1)
    EndIf
    Next
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • herzlichen dank für deine mühe name22!!!

    ich habe noch die variable $sSearchText deklariert aber irgendwie wird das bild immer nur bei dem fenster angezeigt, welches den fokus hat. :) ich hätte gern, dass es ständig bei allen angezeigt wird und die aktualisierung jeweils erneut stattfindet, wenn ein fenster wieder den focus hat... -hast du da vielleicht noch eine idee? ansonsten eigne ich mir jetzt mal an was da genau passiert, bei dem was du da hingezaubert hast :)

    vielen dank nochmal!

  • Das Bild wird nur ein mal angezeigt weil SplashImage nur ein mal aktiv sein kann. ;)
    Du müsstest eine andere Anzeigemethode wählen, wenn du das Bild in mehreren Fenstern sehen willst.
    z.B. Ein Fenster mit dem Stil $WS_POPUP, was einem SplashImage schon recht nahe kommt denke ich.