Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ruhezustand blockieren-> Versuch erkennen -> selbst auslösen (https://www.delphipraxis.net/65032-ruhezustand-blockieren-versuch-erkennen-selbst-ausloesen.html)

Union 10. Apr 2006 08:45

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Da steht aber:
Zitat:

Zitat von msdn
An application should process this event as quickly as possible

und
Zitat:

Zitat von msdn
The system allows approximately 20 seconds

Das ist für mich keine genaue Aussage. Zudem gibt es einen Registry-Eintrag, mit dem man die Wartezeit reduzieren bzw. sogar auf Null setzen kann.

DevilsCamp 10. Apr 2006 08:56

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Zitat:

Zitat von Union
Da steht aber:
Zitat:

Zitat von msdn
An application should process this event as quickly as possible

und
Zitat:

Zitat von msdn
The system allows approximately 20 seconds

Das ist für mich keine genaue Aussage. Zudem gibt es einen Registry-Eintrag, mit dem man die Wartezeit reduzieren bzw. sogar auf Null setzen kann.

Auf NULL? Da kann ja noch nichtmal ein Treiber reagieren.

Und anscheinend ist für Microsoft "As quickly as possible" = "The system allows approximately 20 seconds"
Und das "verstecken" der Daten sollte allerdings sicher nicht mehr als eine, max. zwei Sekunden dauern.

Ich kann aus meiner Erfahrung jedenfalls sagen, dass die Zeit ausreicht noch Daten an einen Server zu schicken und auf Antwort zu warten.


Aber das sollte ichbins selber entscheiden wie er es machen will.

hitzi 10. Apr 2006 08:57

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Zitat:

Zitat von Union
Zudem gibt es einen Registry-Eintrag, mit dem man die Wartezeit reduzieren bzw. sogar auf Null setzen kann.

Wo ist das Problem - dann muss eben das Programm den Registry-Eintrag checken und bei Bedarf anpassen - allerdings nach Programmbeendigung auch wieder auf den Ursprungseintrag zurücksetzen, damit's keinen Ärger mit dem User gibt.

TeronG 10. Apr 2006 09:32

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Zitat:

Zitat von hitzi
Wo ist das Problem - dann muss eben das Programm den Registry-Eintrag checken und bei Bedarf anpassen - allerdings nach Programmbeendigung auch wieder auf den Ursprungseintrag zurücksetzen, damit's keinen Ärger mit dem User gibt.

:shock: Du willst doch nicht etwa ungefragt in der Registry rumspielen :?:

Zitat:

Zitat von DevilsCamp
... Er landet WIEDER in seiner Behandlungsroutine wo er den Ruhezustand blockiert und wieder aufruft => Endlosscheife. ...

Sowas könnte mal mit ner einfachen Boolean verhindern ... :gruebel:

hitzi 10. Apr 2006 10:54

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Zitat:

Zitat von TeronG
Du willst doch nicht etwa ungefragt in der Registry rumspielen

Warum nicht? Wenn es wirklich so sicherheitsrelevant ist, ob das Programm geöffnet bleibt oder nicht, dann kann man auch mal die Registry "missbrauchen". Man kann ja bei der ersten Benutzung oder bei der Installation des Programmes auf die Änderung und die Gründe hinweisen. Außerdem ist die Änderung doch nur aktiv, wenn das Programm gestartet ist.

Was machen denn die ganzen "Internet-Cafe Programme", die alle möglichen Sachen vor dem User über die Registry verstecken. Wenn es die Sicherheit erfordert, sollte man schon auch zu solchen Mitteln greifen dürfen.

Gruss

TeronG 10. Apr 2006 12:51

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Zitat:

Zitat von hitzi
Warum nicht?

Zitat:

Zitat von hitzi
Man kann ja bei der ersten Benutzung oder bei der Installation des Programmes auf die Änderung und die Gründe hinweisen.

eben ... soo einfach und schon weis der User bescheid ...
Zitat:

Zitat von hitzi
Außerdem ist die Änderung doch nur aktiv, wenn das Programm gestartet ist.

und wenn während des betriebes des Programmes der wert geändert wird? (regedit oder andere software ..)
Zitat:

Zitat von hitzi
Was machen denn die ganzen "... Programme", die alle möglichen Sachen ....

Das mag jeder sehen wie er will (das wird eh jeder so machen ^^) aber ich find es einfach nich gut. Und nur weil es alle/viele so machen ..... :roll:
Also ich fände die erste Idee fals machbar schon recht fein (bis jetzt ^^).

ichbins 11. Apr 2006 11:49

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
ich mach halt einfach eine boolean-Variable etwa so:

Delphi-Quellcode:
procedure getmessage;
begin
  if bool then exit;
  post(abbruchmessage);
  bool:=true;
  save;
  post(shutdownmessage);

ichbins 14. Mai 2006 20:24

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Inzwischen bin ich so weit gekommen:
Delphi-Quellcode:
procedure TForm1.WMPowerBroadcast(var Msg: TWMPower);
begin
  showmessage('got message: wmpowerbroadcast');
  if ((msg.msg=PBT_APMQUERYSUSPEND) and (not readyforsuspend)) then
  begin
    showmessage('message is pbt_apmquerysuspend');
    Msg.Result := BROADCAST_QUERY_DENY;
    if messagedlg('denied. suspend?',mtinformation,[mbyes,mbno],0)=mryes then
      suspend(self);
  end else
    showmessage('message is not pbt_apmquerysuspend');
end;

procedure suspend(var form:tform1);
begin
  form.readyforsuspend:=true;
  form.closeallowed:=true;
  form.close;
  setsystempowerstate(true,false);
end;
Aber leider funktioniert das ganze nicht. Wenn ich den Ruhezustand auslöse, erhält er zwar die wmpowerbroadcast, aber erkennt nicht, dass es sich um eine pbt_apmquerysuspend handelt.

Olli 14. Mai 2006 20:44

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
Schreibe einen PnP-Treiber der den Ruhezustand nicht unterstützt und installiere ihn. Das funzt immer - den Ruhezustand gibt's dann nimmer.

Aber mal ernsthaft, kannst du das mit dem Verstecken der Daten nochmal genauer ausführen?!

BTW:
Zitat:

Zitat von Union
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.

Sowas gibt es natürlich nicht. Denn die Standardfensterroutine dürfte das wohl verarbeiten - und die ist schließlich an der Reihe wenn das eigene Programm eine Nachricht nicht verarbeitet.

ichbins 14. Mai 2006 20:47

Re: Ruhezustand blockieren-> Versuch erkennen -> selbs
 
@treiber: vielleicht eine Stufe zu brutal ;)


ich will den Ruhezustand ja nur verhindern, um dann meine Sachen zu speichern, was unter Umständen länger als 20 Sekunden dauern kann, und dann den Ruhezustand selbst auslösen, so dass es dem User nur "verzögert" scheint.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 2 von 3     12 3      

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