AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ruhezustand blockieren-> Versuch erkennen -> selbst auslösen
Thema durchsuchen
Ansicht
Themen-Optionen

Ruhezustand blockieren-> Versuch erkennen -> selbst auslösen

Ein Thema von ichbins · begonnen am 11. Mär 2006 · letzter Beitrag vom 15. Mai 2006
Antwort Antwort
Seite 1 von 3  1 23      
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#1

Ruhezustand blockieren-> Versuch erkennen -> selbst au

  Alt 11. Mär 2006, 12:14
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]
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#2

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 08:33
MSDN-Library durchsuchenWM_POWERBROADCAST ist dein Freund.

Damit brauchst du den Ruhezustand nicht blockieren, sondern einfach nur auf die Message reagieren und deine Daten "verstecken" sobald diese Nachricht kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:07
Hi ichbins,

im Interface:
procedure WMPowerBroadcast(var Msg : TWMPower) ; message WM_POWERBROADCAST; In der Implementation:
Delphi-Quellcode:
//------------------------------------------------------------------------
procedure TfrmMain.WMPowerBroadcast(var Msg: TWMPower);
//------------------------------------------------------------------------
// Suspend ablehnen
//------------------------------------------------------------------------
begin
   Msg.Result := BROADCAST_QUERY_DENY;
end;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#4

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:20
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#6

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:26
Zitat von Union:
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.
Wo bitte hast du das her? Laut MSDN erwartet Windows von JEDEM Programm eine Antwort. Standardmäßig dürfte ein Delphi Programm TRUE zurückliefern, da er aber auf die Nachricht reagiert, sollte Windows solange warten, bis eine Antwort zurückkommt.



<edit>
OK, hast recht. Aber er hat immerhin ZWANZIG Sekunden Zeit auf die Nachricht zu reagieren. Das osllte wohl ausreichen.
</edit>
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:31
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#8

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:33
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.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:37
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#10

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs

  Alt 10. Apr 2006, 09:39
Zitat von Union:
Wo hast Du denn die 20 Sekunden her?
MSDN-Library durchsuchenPBT_APMQUERYSUSPEND und MSDN-Library durchsuchenPBT_APMSUSPEND

Jeweils der erste Link
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz