![]() |
Ruhezustand blockieren-> Versuch erkennen -> selbst au
Hi, wie geht das?
ich habe ein Programm das "vertrauliche Daten" anzeigen kann, und wenn der User jetzt den Ruhezustand auslöst, will ich das blockieren, alle Daten speichern + beenden und dann selbst den Ruhezustand auslösen, so dass nicht beim nächsten Start die Daten wieder angezeigt werden. nen Code für Ruhezustand auslösen hab ich irgendwo hier schon mal gefunden, das ist kein Problem. aber wie kann ich ihn blockieren und sogar einen Versuch erkennen? [ich hoffe mal ich hab in die richtige Sparte gepostet] |
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
![]() Damit brauchst du den Ruhezustand nicht blockieren, sondern einfach nur auf die Message reagieren und deine Daten "verstecken" sobald diese Nachricht kommt. |
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Hi ichbins,
im Interface:
Delphi-Quellcode:
In der Implementation:
procedure WMPowerBroadcast(var Msg : TWMPower) ; message WM_POWERBROADCAST;
Delphi-Quellcode:
//------------------------------------------------------------------------
procedure TfrmMain.WMPowerBroadcast(var Msg: TWMPower); //------------------------------------------------------------------------ // Suspend ablehnen //------------------------------------------------------------------------ begin Msg.Result := BROADCAST_QUERY_DENY; end; |
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Wie ich schon geschrieben habe:
Wenn er soweit ist, dann braucht er den Versuch doch nicht blockieren um ihn dann selber zu starten. Problem dabei ist nämlich: Er blockiert den Versuch in den Ruhezustand zu gehen, "versteckt" seine Daten und initiiert den Ruhezustand dann selber. Folge: Er landet WIEDER in seiner Behandlungsroutine wo er den Ruhezustand blockiert und wieder aufruft => Endlosscheife. Aber wenn er schon soweit ist den Versuch in den Ruhezustand zu gehen zu überprüfen, dann kann er doch dort gleich seine Daten "verstecken" und den Ruhezustand zulassen. |
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Das geht nicht, da das Suspend sehr zeitkritisch ist. Wenn man die Broadcast Nachricht nicht sofort beantwortet, wird das Suspend ausgelöst, ohne dass man darüber die Kontrolle hat. Besser wäre es, die Nachricht dann zu blockieren, die "Daten zu verstecken" und ein entsprechendes Flag zu setzen. Dann die Nachricht an sich selber schicken. Da das Flag jetzt gesetzt sein sollte, wird auf die Nachricht nicht mehr reagiert.
|
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Zitat:
<edit> OK, hast recht. Aber er hat immerhin ZWANZIG Sekunden Zeit auf die Nachricht zu reagieren. Das osllte wohl ausreichen. </edit> |
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Das ist praktische Erfahrung. Und Windows wartet auch nicht auf jedes Programm. Sonst würde ja das Runterfahren verhindert durch Programme, die diese Message gar nicht verarbeiten.
|
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Siehe mein Edit.
Das Programm hat 20 Sekunden Zeit auf PBT_APMQUERYSUSPEND zu reagieren und ebenfalls 20 Sekunden bei PBT_APMSUSPEND. Das sollte wirklich reichen. Denn ich denke mal es geht auch deutlich schneller, wenn er das Programm beendet. |
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Wo hast Du denn die 20 Sekunden her? Das ist vielleicht der Fall bei einem Shutdown, aber was ist bei Hibernation? Dort bleiben zwar die Daten erhalten (theroetisch), aber wenn man dem nicht traut oder man gerne noch eine offene SQL-Server-Verbindung schliessen möchte... Und gerade auf Laptops macht das dann whuusch und weg.
|
Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
Zitat:
![]() ![]() Jeweils der erste Link |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz