NotifyIcon Anwendung, nach Windows Sperre wird hidden Fenster immer wieder mal sichtbar!

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von r0tzi.

    NotifyIcon Anwendung, nach Windows Sperre wird hidden Fenster immer wieder mal sichtbar!

    Einen Wunderschönen!

    Ich habe eine kleine vb.net Anwendung. Dessen Mainform soll immer hidden sein und eigentlich nur per "NotifyIcon" in der Taskleiste gesteuert werden.
    Soweit so gut, klappt auch alles. Ich sehe wie gewollt nur das NotifyIcon und sein ContextMenuStrip!

    Das Problem ist, wenn ich den Computer sperre oder er sich nach gewisser Zeit selber sperrt, und dann wieder aufwacht, also ich mich dann nach einer Weile wieder anmelde (Ich bin nicht abgemeldet, - der Rechner war aber gesperrt - mit Passworteingabeaufforderung bei Rewake) - dann ist das Fenster selber wieder sichtbar!

    Aber nur wenn eine gewisse Zeit vergeht während des gesperrten Zustandes. Habe keine genaue Ahnung, mal kommts mir länger vor, mal nicht. Wenn ich den Rechner sperre und unmittelbar darauf wieder entsperre, dann bleibt es beim NotifyIcon, also alles gut.

    Ich erkenne keinen Grund dafür. Und ich kann dem auch nicht entgegenwirken.
    Jetzt habe ich einen Button reingemacht mit dem Text "Hide Me". und dem Code: Me.Visible = False. (sehr unzufriedenstellend)

    Warum wird das Fenster trotz: Visible/False und Me.Hide(), immer wieder nach einer längeren Sperre Sichtbar?
    Es nutzt auch nichts, wenn ich in die Events "VisibleChanged" und "MinimumSizeChanged" fix reinmach: "Me.Visible = False"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Hinti“ ()

    Als quick&dirty Lösung kannst du die Form außerhalb des Desktops positionieren.
    Me.Right = Me.Width, oder so
    Ui, das ist mir zu dirty :rolleyes:
    Weil die Anwendung läuft auf verschiedenen PCs, der eine Verwendet 1 Bildschirm, der andere 2 und einige haben sogar 3 Monitore.

    Und ich will mir vorbehalten, das Fenster unter gewissen Umständen zum Vorschein zu bringen. Also wenn es bewußt gewünscht ist.
    Da mag ich das Fenster nicht so rum-schubsen :whistling:
    Der nächste Schritt wäre wohl zu ermitteln, was so alles passiert, wenn das Formular (ungewollt) sichtbar wird. D.h. Du haust nen Haltepunkt in den Form.VisibleChanged-EventHandler rein und löst Deine PC-Sperrung aus. Entweder wird Windows rummosern, dass da irgendwas blockiert oder Du siehst beim Neuanmelden, was genau passiert ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Der nächste Schritt wäre wohl zu ermitteln, was so alles passiert, wenn das Formular (ungewollt) sichtbar wird. D.h. Du haust nen Haltepunkt in den Form.VisibleChanged-EventHandler rein und löst Deine PC-Sperrung aus. Entweder wird Windows rummosern, dass da irgendwas blockiert oder Du siehst beim Neuanmelden, was genau passiert ist.

    Werde ich testen, aber was soll sein? im Programm werde ich gar nichts sehen - is ja kein Code von mir der das auslösen kann. Windows macht es sichtbar und stellt es quasi wiederher.

    Vorallem schön zu sehen: Eine andere (fremd-) Anwendung (eine Art Monitor), welche normalerweise auch nur in der NotifyIcon-Bar sichtbar ist - dessen Window ist immer gleichermaßen dann sichtbar. Diese Anwendung ist nicht von mir. Kein Code oder sowas verfügbar. Aber die hat eigentlich genau dasselbe Problem.
    Also vieleicht doch die dirty Variante ?

    VB.NET-Quellcode

    1. Private Sub FormOffset(_form as Form)
    2. Dim locationOffset as new Point = Screen.PrimaryScreen.Bounds.Location.Offset(- _form.Width, 0)
    3. _form.Location = locationOffset
    4. End Sub

    ... ungetestet, müsste aber hinhauen.
    thema dirty...

    also, leg einen timer an, der alle 0,1 sek me.hide setzt, unter umständen mit nem errorhanlder den error abfangen da die form ja schon weg ist....

    im notifyicon, menstrip eine variable typ boolean mit klick auf anzeigen auf true setzten.

    im timer,

    if boolean = false then me
    me.hide
    else
    me.show
    end if

    bei ausblenden der form wieder boolean auf false setzen, dass der timer wieder die form wegjuckelt :) give it a try
    Ich kann's leider nicht nachvollziehen.
    Ich arbeite mit Windows 10.
    Ich hab ein neues WinForms-Projekt und hau nen Button und ein NotifyIcon aufs Formular.
    Dann eben bei Button.Click:

    VB.NET-Quellcode

    1. NotifyIcon.Visible = True
    2. Me.Hide

    Dann drück ich Windows-Taste+L, um den PC zu sperren. Dann meld ich mich wieder mit Passwort an. Siehe da: NotifyIcon ist in der Infoleiste, Formular bleibt versteckt. As I wished.

    @r0tzi: Dein Code

    VB.NET-Quellcode

    1. if boolean = false then me
    2. me.hide
    3. else
    4. me.show
    5. end if
    ist ... ausbaufähig, da nicht kompilierbar.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    hab kein vs auf dem rechner... habs nur sinngemäß geschrieben, bissle darf er noch selber machen... :Pok also nochmal richtig tzttztz

    bei klick auf den menustrip form anzeigen

    Quellcode

    1. BolZeigmich = True


    beim Timer:

    Quellcode

    1. Try
    2. If BolZeigmich = False then
    3. me.hide
    4. else
    5. me.show
    6. end if
    7. catch
    8. end try


    bei form verschwindibus:

    Quellcode

    1. BolZeigmich = False



    besser? :D