Programm verhindert PC-Herunterfahren



  • "Diesem"? Welchem Fenster?

    Es gibt kein &CanClose oder OnCloseQuery im ganzen Projekt.


  • Mod

    Hallo

    Nur ein Fenster hat einen OnClose

    und in OnClose gibt es "Action" 😡

    MfG
    Klaus



  • Bitte entschuldige falls ich dich verärgert haben sollte. Das war nicht meine Absicht.

    Das Tool hat 2 Fenster und 2 Datenmodule, die automatisch erzeugt werden (Projektoptionen->Formulare->Automatisch erzeugen). Während der Laufzeit kommen bei meinen Tests keine weiteren hinzu.
    In keinem dieser 2 Fenster gibt es einen OnClose-Handler und somit auch keine Manipulation des Action-Wertes.
    In meinem Einstellungen-Fenster gibt es ein OnClose-Ereignis. Dort mache ich die normalen "Wollen Sie die Änderungen speichern"-Sachen und setze entsprechend Action auf caNone wenn der User "Abbrechen" wählt. Aber dieses Fenster wird weder automatisch erzeugt, noch erstelle ich zwischendurch eine Instanz. Nur wenn ich in meinem Menü meines TrayIcons den entsprechenden Eintrag auswähle wird das Fenster erzeugt, angezeigt und nach dem Schließen wieder gelöscht. D.h. es hat bei meinen Tests nie existiert.

    Du hältst es also nicht für sinnvoll zu klären, was diese TPUtilWindows sind und warum/ob diese das Herunterfahren verhindern?



  • hi, ich hab das gleiche problem...

    auch ein programm, was normalerweise nicht sichtbar ist, also nur im tray...
    das kann er auch nicht beenden, allerdings ist es so, wenn ich herutnerfahren will, macht ers einfach nicht, mein programm ist allerdings noch da, nur das trayicon ist dann weg. ich muss dann in den taskmanager usw, aber irgendwie is das noch nich das gelbe vom ei....

    kann das noch irgendwie mit den timern zu tun haben? halt doch mal beim onclose alle timer an oder sowas, werd ich auch gleich nochmal testen...



  • Hi iNVisO!

    Wenn ich meinem Haupt-Fenster eine OnClose-Routine gebe, wird diese beim Herunterfahren gar nicht ausgeführt.
    Wenn ich meinem Haupt-Fenster eine OnCloseQuery-Routine gebe, wird sie nur dann ausgeführt, wenn ich einmal ein beliebiges Fenster sichbar geöffnet hatte. Da das OnCloseQuery-Ereignis wohl intern auf die WM_QUERYENDSESSION-Message reagiert, stimmt das also mit meiner Beobachtung beim direkten Empfangen dieser Message überein.

    Wie bekommst du dein Programm in den Traybereich? Mit der TTrayIcon-Komponente aus der Beispiele-Gruppe?
    Ich benutze die TrayIcon-Komponente aus den LMD-Tools. Wenn ich mein Programm auf die TTrayIcon-Komponente umstelle habe ich auch ein leicht anderes Verhalten. U.a. hatte ich deinen Effekt dann auch schon ab und zu.

    Ich habe mein Programm mal auf mehreren PCs getestet.
    LMD-Tool-Version:
    - Unter XP fährt der PC nicht herunter. Er läuft nach dem "Neu Starten"-Klicken ganz normal weiter. Auch mein TrayIcon bleibt da.
    - Unter W2000 fährt der PC ordnungsgemäß herunter!
    TTrayIcon-Version:
    - Unter XP fährt der PC nun herunter. Ich muss aber die WM_QUERYENDSESSION-Message abfangen und mit true beantworten.
    - Unter W98 fährt der PC auch mit dieser Version nicht herunter.

    Ist alles sehr konfus und ich kann irgendwie noch keine Regeln erkennen 😞



  • Hi, versucht doch mal die Botschaft innerhalb der TApplication-Instanz, an statt innerhalb eines (unsichtbaren) Forms abzufangen.

    Vielleicht reagiert die TApp. ja noch, auch wenn kein sichtbares Form vorhanden ist.

    Grüße Joe_M.


  • Mod

    Hallo

    @warp
    du hast mich nicht veraergert, wenn ich etwas heftiger reagiert habe liegt es nur an dem OnClose usw
    lies einfach nochmal alles durch
    (zuert hast du ein OnClose ...)

    MfG
    Klaus



  • warp schrieb:

    Hi iNVisO!
    TTrayIcon-Version:
    - Unter XP fährt der PC nun herunter. Ich muss aber die WM_QUERYENDSESSION-Message abfangen und mit true beantworten.
    - Unter W98 fährt der PC auch mit dieser Version nicht herunter.
    (

    Könntest du mir nochmal beschreiben, wie du die message abfängst? weil mir würd das reichen, win98 wird nich unterstützt.... zur !not! könnte man ja aber bestimmt testen, obs win98 is, dann deins benutzen und sonst meins...



  • warp,

    warp schrieb:

    Auf manchen PCs besteht das Problem, dass der PC nicht neubootet/runterfährt, wenn mein Tool läuft.

    verwendest Du vielleicht die mitgelieferten Internet-Komponenten von Borland (TNMPOP3, TNM...)?
    Falls ja, sind diese Komponenten vermutlich die Ursache. Ich hatte das gleiche Problem. Eine Anfrage in den Borland Newsgroups hat ergeben, daß die TNM*-Komponenten wohl mit einigen "Major Bugs" belastet sind und man besser auf Indy ausweichen sollte.



  • @zufaulzumeinloggen
    Meinst du Application->OnMessage? Habe ich schon probiert, hat aber leider auch die Message nicht bekommen.
    Ich habe schon alle Möglichkeiten zum Empfangen von Messages ausprobiert, die mir eingefallen sind. Mit SetWindowsHookEx() könnte ich die Message empfangen, nur leider kann ich da keinen Result-Wert setzen und auch nicht verhindern, dass die Message letztendlich doch bei dem TPUtilWindow landet, das dann das Herunterfahren verhindert.

    @KlausB
    Tut mir leid, aber ich verstehe nicht, was du mir sagen willst.
    Ich habe kein OnClose.

    @iNVisO:
    In der Klassendeklaration des Fensters, das die TrayIcon-Komponente enthält:

    BEGIN_MESSAGE_MAP
            case WM_QUERYENDSESSION:
                ((TMessage*)Message)->Result = true;
                break;
        END_MESSAGE_MAP(TForm);
    

    @dschensky:
    Ich verwende tatsächlich Internetkomponenten, aber es sind bereits die Indy-Komponenten. Schade, wäre ein Lösungsansatz gewesen.



  • Ich habs gelöst! 😃

    Hier mal eine kurze Zusammenfassung meiner Basteleien:
    Zuerst habe ich die LMD-Tools auf Version 7 aktualisiert. Allein dadurch (ohne einen WM_QUERYENDSESSION-Handler) ist der PC nun runtergefahren, falls ich kein Fenster offen hatte.
    Hatte ich aber mal ein Programmfenster offen, ist er nicht mehr runtergefahren. Ich konnte zwar die WM_QUERYENDSESSION-Message empfangen, es war aber egal, was ich geantwortet habe (msg.Result = true;), er fuhr nicht runter. 😡
    Dann habe ich alte Programmversionen rausgekramt und geprüft, ab welcher Version dieser Bug aufgetreten ist. Als ich das wusste, habe ich in der Versionsverwaltung nachgesehen, was ich zu diesem Zeitpunkt geändert hatte. Es waren ein paar Erweiterungen bezüglich RAS (Wählverbindungen, DFÜ, ...) Unter anderem habe ich ein fertiges Statusfenster, das während des Wählenvorgangs angezeigt wird, hinzugefügt: TApdRasStatus aus den AsyncPro-Komponenten von TurboPower.

    Tja, und nachdem ich diese Komponente aus meinem jetzigen Quellcode rausgenommen hatte, fuhr der PC auch wieder brav runter, egal in welchem Zustand mein Tool war. 😃
    Diese Komponente lag auf einem Datenmodul, das zu den automatisch beim Programmstart erzeugten Formularen gehört.

    Seitdem kann ich auch auf die WM_QUERYENDSESSION-Nachricht reagieren und den Benutzer fragen, ob er sich sicher ist, dass er runterfahren will. 😉


Anmelden zum Antworten