ALT+F4 und auch X abfangen



  • Hallo wie fange ich in meinem eventhandler die nachrichten ALT+F4 und auch das beenden X oben rechts, sowie recht maustaste auf taskleiste und Programm schliessen ab? Wenn ich WM_DESTROY abfange schließt sich das Programm trotzdem, ich will aber sicher ghen daß all meine Daten gesichert sind dann wird ein Flag gesetzt und dann erst darf sich das Proggy beenden.



  • Ok ich glaub ich habs, ich muss auch noch WM_CLOSE abfangen, jetzt aber mein nächstes Problem, ich möchte verhindern das mein Proggy mehr als einmal startet damit der Datensatz der verwendet wird nicht durcheinandergebracht wird.



  • Hier ein Beispiel mit CreateMutex, einfach an den Anfang des Programms schreiben:

    HANDLE mHandle;
    
    mHandle = CreateMutex(NULL,false,"EinEindeutigerString");
    if (mHandle!=NULL)
    {
       if (GetLastError()==ERROR_ALREADY_EXISTS)
       {
          // Anwendung bereits einmal gestartet
       }
    }
    

    Am Ende mit CloseHandle freigeben!!

    Oder vor dem Registrieren des Programmfensters mit FindWindow(),
    ABER der Nachteil hierbei ist, wenn man das Programm zweimal schnell hintereinander startet, klappt's nicht.



  • Senser schrieb:

    Ok ich glaub ich habs, ich muss auch noch WM_CLOSE abfangen, jetzt aber mein nächstes Problem, ich möchte verhindern das mein Proggy mehr als einmal startet damit der Datensatz der verwendet wird nicht durcheinandergebracht wird.

    Das das Programm hier nicht zweimal gestartet werden darf ist ein Designfehler und sollte nicht einfach verhindert werden.

    Versuche den Datensatz (wo liegt der?) zu locken und allen anderen Programmen den Zugriff darauf zu verwehren.

    BTW: ALT+F4 und X abfangen gehört zu den miesesten Dingen, Software dieser Art würde ich nicht installieren 😉 Wenn du damit übrigens verhindern willst, dass dein Programm während der Datensatzbehandlung beendet wird: Nicht möglich. Ich dreh einfach mal den Strom ab und schwups hab ichs geschafft. Oder viel einfacher: ProcessExplorer -> Wiedersehen.

    MfG SideWinder



  • Ok Sidewider, es geht ja nicht darum den User zu bevormunden, sondern einfach einen korrekten Ablauf zu garantieren. Ich bin für Vorschläge jeglicher Art offen. Mein Proggy läuft von win98se bis hin zu winxp und der datensatz liegt in einer binärdatei im Hautpverzeichniss des Progamms. Ich bin ganz Ohr für gute Ansätze.

    Dann weiter, wie garantiere ich das der Datensatz vor Beendigen des Programms korrekt gesichert wird. Also ich hab WM_CLOSE und WM_DESTROY abgefangen und zu meiner Sicherungsroutine geleitet. Die Sache mit den Daten ist folgende, sie sind nicht sonderlich wichtig, da aus dem Internet (Serverscan) bezogen und beim nächsten Programmstart sowieso veraltet, aber es sieht halt gut aus beim Programmstart das Fenster so vorzufinden wie mans verlassen hat, zwischenspeichern will ich nicht unbedingt, da es etwas Zeit in Anspruch nimmt (bis zu 5 Sekunden) das dauer mir eben zu lange nur als Zwischenspeicherung.



  • Zwischen speichern in nen Thread auslagern


Anmelden zum Antworten