Announcement

Collapse
No announcement yet.

Besondere Ereignisse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Besondere Ereignisse

    Hi,

    Für ein privates Projekt bräuchte ich Hilfe, um bestimmte Ereignisse zu identifizieren, bei denen spezielle Aktionen notwendig sind. Ich habe zwar in der von Visual Studio angebotenen Liste geschaut, habe da aber nichts gefunden, was mir weiterhelfen könnte, und um auf MSDN zu suchen fehlen mir die entsprechenden Schlüsselwörter nach denen ich suchen könnte
    1. Fenster über Schaltfläche _ minimieren (Programm soll für dieses Fenster den TaskBar-Eintrag entfernen und überprüfen, ob ein weiteres Fenster der Applikation noch in Normal oder Maximized vorhanden ist, wenn nicht soll ein Tray-Icon angezeigt werden)
    2. Programm bei Windows-Logout beenden (Programm soll bevor es sich beendet noch ein paar statistische Infos in eine Datei im Home-Verzeichnis des Users schreiben, das soll aber NICHT passieren, wenn es über den Task-Manager abgeschossen wird)
    3. Fenster über Schaltfläche X schließen (passiert dies im Hauptfenster, soll das Programm nachfragen, ob die Applikation beendet oder minimiert werden soll, danach wie oben)


    BTW: Gibt es eigentlich eine einfache Möglichkeit, festzustellen, ob eine Person sich an dem gleichen Tag schon mal eingeloggt hat, oder sogar momentan auf einem anderen Rechner innerhalb der Domäne eingeloggt ist, oder muss ich das als EarliestLogin/LatestLogout mit in die Info-Datei schreiben?

    Schon mal Danke im Voraus
    Martin Dietz

  • #2
    Hallo Martin,

    zu 1. Form.WindowState-Eigenschaft i.V.m. FormWindowState-Enumeration
    zu 2 und 3. So etwas geschieht sinnvollerweise im FormClosing-Ereignis. 2. kann ggf. auch im FormClosed-Ereignis stattfinden.

    Gruß Jürgen

    Comment


    • #3
      Danke erstmal, wenn aber 2 und 3 vom gleichen Ereignis behandelt werden, wie unterscheide ich dann, ob es sich um eine Beendigung durch den User oder eine Beendigung durch das System handelt? Schließlich muss ich bei zweiterem die Rückfrage ("Schließen oder Minimieren?") unterdrücken. Und wenn ich die Applikation über den Task-Manager abschieße (also nicht über die Prozess-Liste sondern das erste Fenster), würde dann nicht auch das Form.Close-Ereignis ausgelöst?

      Comment


      • #4
        Hallo Martin,

        dazu kann ich nichts sagen, das musst Du ausprobieren. Ich vermute aber, dass mindestens das FormClosing-Ereignis beim "Abschießen" durch den TaskManager gar nicht ausgelöst wird; der TaskManager dürfte mit Application.Exit arbeiten.

        Außerdem gibt es eine Möglichkeit abzufragen, ob das System heruntergefahren wird (ich erinnere mich allerdings nicht daran, wo und wie genau). Environment.HasShutdownStarted-Eigenschaft ist es wohl nicht, aber suche einmal bei der SystemEvents-Klasse und der SessionEndReasons-Enumeration.

        Jürgen

        Comment


        • #5
          Erstmal Sorry, dass ich das so lange hab liegen lassen ohne zu antworten, aber wenn man den ganzen Tag im Dienst programmiert, hat man abends irgendwie keine große Lust sicch dann doch noch auf dieses private Projekt zu stürzen, das im Endeffekt ja doch nur aus Übungszwecken angefangen wurde.

          Also Erstmal vielen Dank, ja FormClosingEventArgs hat ein Property CloseReason, mit dem ich unterscheiden kann, ob es sich um einen SystemShutdown oder eine User-Beendigung handelt, eine Variante davon ist TaskManagerClosing, nur um diese Unsicherheit zu beseitigen.

          Was mir aber weiterhin Probleme macht ist das Reagieren auf Änderungen im WindowsState. Ich kann zwar mit Setzen der WindowState-Eigenschaft des Formulars das Fenster per Code auf Normal oder Minimized setzen, ich finde in der Liste aber dennoch kein Ereignis, das auf einen Statuswechsel durch den User (Klick auf die aktivierte Taskleiste, Schließen über _ oder Menü unter dem Icon) reagiert, also so etwas wie WindowStateChanged, FormStateChanged o.ä. Was wäre denn da so das richtige? Visible Changed? Resize? Deactivate und überprüfen, ob WindowState sich geändert hat?

          Comment


          • #6
            Zum letzten Absatz: Wenn ich mich richtig erinnere, habe ich für diese Situation das Resize-Ereignis genutzt. Jürgen

            Comment

            Working...
            X