MsgBox wird nicht refreshed

  • Hallo zusammen,

    da meine Suche keine Ergebnisse zu Tage gefördert hat, frage ich Euch um Rat. Mir ist aufgefallen, dass in seltenen Fällen der Inhalt eines MsgBox-Fensters nicht aktualisiert wird. Wenn ein anderes Fenster darüber gelegt wird und wieder verkleinert wird, sieht man im MsgBox-Fenster nicht mehr den korrekten Inhalt, sondern den Inhalt des darüber gelegten Fensters.

    Ist dieses Problem bekannt bzw. gibt es eine Lösung dafür?

  • [autoit]


    TraySetState(2)
    MsgBox (0, "Sicherheitsupdate", "Auf Ihrem System wurde ein automatisches Sicherheitsupdate gestartet." & @LF & "Bitte führen Sie, so lange die Installation läuft, keinen Neustart durch." & @LF & "Sie können jedoch am System wie gewohnt weiter arbeiten.")

    [/autoit]

    Auf dem Bildschirm soll nur eine Meldung erscheinen, die der Benutzer schließen kann. Bei einigen Mitarbeitern gibt es manchmal das Problem, dass man nicht mehr lesen kann, was in der MsgBox stehen soll, nachdem man ein anderes Fenster in den Vordergrund geholt hat. Im Fenster der MsgBox ist dann der Inhalt des darübergelegten Fensters zu sehen. Als ob es durchgepaust worden wäre. Ich kann das Verhalten leider auch nicht reproduzieren, habe aber schon Rechner gesehen, die das Problem hatten.

  • Hm, bei mir keine Probleme. Egal wie oft und welche Fenster ich (teilweise) über die MsgBox lege ...
    Getestet unter Win7 x64 mit aktiviertem Aero.

    Einfache Problemlösung: Die MsgBox über alle anderen Fenster legen.

    [autoit]

    #include <Constants.au3>
    TraySetState(2)

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

    Global Const $MB_SETFOREGROUND = 0x00010000
    MsgBox (BitOR($MB_TOPMOST, $MB_SETFOREGROUND), "Sicherheitsupdate", "Auf Ihrem System wurde ein automatisches Sicherheitsupdate gestartet." & @LF & "Bitte führen Sie, so lange die Installation läuft, keinen Neustart durch." & @LF & "Sie können jedoch am System wie gewohnt weiter arbeiten.")

    [/autoit]

    Gruß
    Greenhorn


  • Kürzer gehts mit dem Flag 262144 ;)

    [autoit]

    MsgBox(262144, "MsgBox-Name", "MsgBox-Text")

    [/autoit]

    Siehe Autoit-Hilfe zur MsgBox, Flag 262144 die MsgBox ist immer im Vordergrund

    [autoit]

    MsgBox(262144, "Sicherheitsupdate", "Auf Ihrem System wurde ein automatisches Sicherheitsupdate gestartet." & @LF & "Bitte führen Sie, so lange die Installation läuft, keinen Neustart durch." & @LF & "Sie können jedoch am System wie gewohnt weiter arbeiten.")

    [/autoit]
  • Dann können die Benutzer aber nicht mehr weiterarbeiten, da das Fenster ständig über allen anderen Fenstern ist. Durch MsgBox wird doch ein Aufruf der Windows-API durchgeführt, oder? Sprich: Ob das Fenster aktualisiert wird oder nicht, liegt nicht in der Hand von AutoIt, kann also nur ein Windows-Fehler sein?

  • Bei einigen Mitarbeitern gibt es manchmal das Problem, dass man nicht mehr lesen kann, was in der MsgBox stehen soll, nachdem man ein anderes Fenster in den Vordergrund geholt hat. Im Fenster der MsgBox ist dann der Inhalt des darübergelegten Fensters zu sehen.

    Ich kenne das nur wenn sich das Programm sich aufgehängt hat bei dem das dann auftritt. Kann es sein das sich bei den Leuten schlicht dein Autoitscript aufhängt?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Das wäre schon möglich. Evtl. ist das System in dem Moment auch komplett ausgelastet (Windows Update, neue Virensignaturen, etc.). Falls es daran liegt, würde es nichts wahrscheinlich auch nichts bringen, wenn man die MsgBox in C++ oder einer anderen Sprache implementiert.

  • Dann können die Benutzer aber nicht mehr weiterarbeiten, da das Fenster ständig über allen anderen Fenstern ist. Durch MsgBox wird doch ein Aufruf der Windows-API durchgeführt, oder? Sprich: Ob das Fenster aktualisiert wird oder nicht, liegt nicht in der Hand von AutoIt, kann also nur ein Windows-Fehler sein?

    Versteh ich nicht. Jeder normale Mensch der weiter arbeiten will nimmt die msgbox zur Kenntnis und drückt diese per Button weg. Thema erledigt, user weiß bescheid und arbeitet weiter...
    Kenne diesen Anzeigefehler auch, jedoch allgemein bei sehr langsamen und ausgelasteten Systemen und nicht unbedingt auf Autoit Fenster bezogen. Das dürfte wohl schlichtweg ein Windows Problem sein, welches nicht mit dem Zeichnen der GUI hinterherkommt.

    EDIT:
    Es gibt btw. auch noch den Parameter Timeout für msgboxen, dann verschwindet diese selbstständig nach einer gewissen Zeit, unabhängig davon ob der User es nun lesen konnte oder nicht.

    Einmal editiert, zuletzt von misterspeed (20. März 2012 um 19:08)

  • Ansonsten könnte man ja auch einfach eine eigene Messagebox erstellen, also eine GUI mit dem selben Sound oder einem ähnlichen Sound, dann kannst du es auch noch grafisch schöner gestalten.

  • Morgen, also ich verstehe das Problem nicht wieso die MessageBox nicht einfach "OntheTop" gesetzt wird, bei uns in der Verwaltung verwenden wir auch TopMost Fenster, der Anwender nimmt wie schon oft erwähnt den Hinweis zur Kenntnis, klickt den OK Button und arbeitet weiter..

    Ich denke es gibt nur 2 Plausible Lösungen bzw Fehler wieso deine Messagebox nicht mehr ordentlich angezeigt wird, dass ist erstens, dein AutoIT Script hängt sich auf oder Windows ist dermaßen ausgelastet das es nicht mehr mit dem neuzeichnen der GUI hinterherkommt..

    Die vermeintliche Lösung von Julien über eine komplette GUI sich eine Messagebox selber zu bauen wird dir auch nichts nützen, weil dass Problem nicht die MessageBox selber ist sondern dein OS oder ggf ein Fehler im Script? ist das Script oben Komplett?

    Also mein Lösungsvorschlag wäre eine Messagebox zu erstellen, diese "On the Top" also als erstes Fenster anzuzeigen und dieser Informationsbox ggf. noch einen Timeout mitzugeben, das diese sich nach z.B. 10 Sekunden automatisch schließt dies erachte ich aber nicht gerade als Sinnvoll denn der Anwender soll die Mitteilung ja auch leesen.. ist er Z.B. nicht am Arbeitsplatz würde diese von selber verschwinden ohne das er es mitbekommen hat..


    Gruß Marvin