Bildschirmschoner

  • Hi,

    ich wollte mir selber einen Bildschirmschoner schreiben der alle 5 Sekunden das Bild wechselt aber irgendwie zeigt er mir die Gui nicht an.

    Spoiler anzeigen
    [autoit]

    $gui=GUICreate("Bildschirmschoner", @DesktopWidth, @DesktopHeight, -1, -1)

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

    while 1
    GUIGetMsg()
    $timer=TimerInit()
    $timerdiff=TimerDiff($timer)
    $pos=MouseGetPos()
    while 1
    $pos2=MouseGetPos()
    if $pos2[0] <> $pos[0]Then
    ExitLoop
    EndIf
    if $timerdiff>10000 Then
    GUISetState(@sw_show, $gui)
    for $i=1 to 5
    $pic=GUICtrlCreatePic($i&".jpg", -1, -1, @DesktopWidth, @DesktopHeight)
    while 1

    $timer2=TimerInit()
    $pos3=mousegetpos()
    $timer2diif=TimerDiff($timer2)
    if $pos3[0]<> $pos Then
    ExitLoop
    ElseIf $timer2diif>5000 Then
    GUICtrlDelete($pic)
    ExitLoop
    EndIf
    WEnd
    Next
    EndIf
    WEnd
    WEnd

    [/autoit]


    Aber ich finde meine Fehler gerade nich und wäre schon glücklich wenigstens mein Ansatz richtig is^^

    Ich hoffe ihr seir nicht so blind wie ich^^

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Nach Guicreate muss ein GUISetState()
    Und das Bild würde ich eher mit GUICtrSetimage wechseln und das Control nur 1x erzeugen am Anfang.

    • Offizieller Beitrag

    Hallo,

    die Zeile

    [autoit]

    $timer=TimerInit()

    [/autoit]


    muss aus der While-Schleife raus!

  • Entschuldigung aber ich hab immer noch Probleme mit dem Script ..
    1. er zeigt die Bilder erst an wenn ich z.b nach 10 Sek. die maus bewege
    2. wenn er die gui anzeigt dann zeigt er immer nur einbild an und wechselt nicht
    3. normalerweise sollte er die gui verstecken wenn die maus wieder bewegt wurde... tut er aber nicht...


    Spoiler anzeigen
    [autoit]

    $gui=GUICreate("Bildschirmschoner", @DesktopWidth, @DesktopHeight, -1, -1)
    GUISetState()
    $timer=TimerInit()
    while 1
    GUIGetMsg()

    $timerdiff=TimerDiff($timer)
    $pos=MouseGetPos()
    while 1
    $pos2=MouseGetPos()
    if $pos2[0] <> $pos[0]Then
    ExitLoop
    EndIf
    if $timerdiff>10000 Then
    GUISetState(@sw_show, $gui)
    for $i=1 to 5
    $pic=GUICtrlCreatePic($i&".jpg", -1, -1, @DesktopWidth, @DesktopHeight)
    while 1

    $timer2=TimerInit()
    $pos3=mousegetpos()
    $timer2diif=TimerDiff($timer2)
    if $pos3[0]<> $pos Then
    ExitLoop(2)
    ElseIf $timer2diif>5000 Then
    GUICtrlDelete($pic)
    ExitLoop(2)
    EndIf
    WEnd
    Next
    EndIf
    WEnd
    WEnd

    [/autoit]


    ich denke die probleme fangen schon in zeile 3 an weil er da ja den timer startet aber wenn der Bildschirmschoner deaktiviert wird dann läuft der timer ja weiter

    danke im vorraus

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Das mit dem Bilder wechsel hab ich jetzt auch umgeändert aber ich habe momentan noch das Problem das wenn ich die Maus bewege das ich nicht weiss wie ich den Timer neustarten soll.

    Spoiler anzeigen
    [autoit]

    $gui=GUICreate("Bildschirmschoner", @DesktopWidth, @DesktopHeight, -1, -1)
    $pic=GUICtrlCreatePic("1.jpg", 0, 0, @DesktopWidth, @DesktopHeight)
    GUISetState()

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

    $timer=TimerInit()

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

    while 1
    GUIGetMsg()
    $pos1=MouseGetPos()


    if TimerDiff ($timer)>5000 Then
    GUISetState(@SW_SHOW, $gui)

    while 1
    for $i=1 to 5
    GUICtrlSetImage($pic, $i&".jpg")
    $timer2=TimerInit()
    Do
    $pos=MouseGetPos()
    if $pos[0] <>0 or $pos[1] <> 0 Then
    ExitLoop(4)
    GUISetState(@SW_HIDE, $gui)
    EndIf
    until TimerDiff($timer2)>5000
    Next
    WEnd
    EndIf
    WEnd

    [/autoit]


    Leider is das script nur auf die positionen 0, 0 bezogen....

    Vieleicht weiss einer von euch wie ich den Timer neustarten kann...würde mich sehr freuen.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Also, die Maus würd ich so testen:

    [autoit]

    $mouse = MouseGetPos() ;Anfang des Scripts
    ...
    ;Im Loop oder mit AdlibEnable
    If Abs(MouseGetPos(0)-$mouse[0]) > 100 Then Exit
    If Abs(MouseGetPos(1)-$mouse[1]) > 100 Then Exit
    ;Die 100 ist jeweils die Empfindlichkeit, also im Bsp. wird erst beendet, wenn die Maus 100 px vom Startpunkt entfernt ist

    [/autoit]

    //Edit: Für was ist denn der erste Timer? Der Screensaver wird doch vom Betriebssystem aufgerufen. Warum also nochmal eine Wartezeit?

  • Ich hab mein Problem fast gelöst...

    ich hab nur noch den Fehler das wenn er den Bildschirmschoner zum 2.mal startet das er die GUI öffnet und dann wieder schließt

    Spoiler anzeigen
    [autoit]

    $gui=GUICreate("Bildschirmschoner", @DesktopWidth, @DesktopHeight, -1, -1)
    $pic=GUICtrlCreatePic("1.jpg", 0, 0, @DesktopWidth, @DesktopHeight)
    $t=0

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

    while 1
    GUIGetMsg()
    while $t=0
    $timer= TimerInit()
    $pos1=MouseGetPos()
    Do
    $pos_check=MouseGetPos()
    if $pos_check[0] <> $pos1[0] or $pos_check[0] <>$pos1[0] Then ExitLoop
    if TimerDiff($timer)>4900 then $t=1
    Until TimerDiff($timer)>5000
    WEnd


    while 1
    for $i=1 to 5
    GUISetState(@SW_SHOW, $gui)
    GUICtrlSetImage($pic, $i&".jpg")
    $timer2=TimerInit()
    Do
    $pos=MouseGetPos()
    if $pos[0] <>$pos1[0] or $pos[1] <> $pos1[1] Then
    GUISetState(@sw_hide, $gui)
    $t=0
    ExitLoop(3)
    EndIf
    until TimerDiff($timer2)>5000
    Next
    WEnd

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

    WEnd

    [/autoit]

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer