AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Herunterfahren im minimierten Zustand erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

Herunterfahren im minimierten Zustand erkennen

Ein Thema von rob60 · begonnen am 4. Jul 2013 · letzter Beitrag vom 5. Jul 2013
Antwort Antwort
rob60

Registriert seit: 11. Mai 2009
72 Beiträge
 
Turbo Delphi für Win32
 
#1

Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 00:23
Hi zusammen,
ich sitze jetzt schon seit einigen Stunden an einem eigentlich simplen Problem: Wie erkenne ich das Herunterfahren des Windows Systems(Win 7) wenn mein Programm minimiert ist. ich habe bereits einen Ansatz gefunden jedoch funktioniert dieser nur mit offenem Fenster zuverlässig, im minimierten Zustand funktioniert es manchmal und manchmal nicht ohne ersichtlichen Grund, fällt euch eine sichere Methode ein?
Code:
private
 procedure WMQueryEndSession(var M: TWMQueryEndSession); message WM_QUERYENDSESSION;


procedure TForm1.WMQueryEndSession(var M: TWMQueryEndSession);
begin
inherited;
  Sicherung; // wird bei herunterfahren ausgeführt
  windows.Beep(800,400);

  M.Result := 1;
  Close;
end;
Ich muss zugeben ich verstehe den code selber nur teilweise und habe in kopiert (bis jetzt habe ich mich nie gross um Messages gekümmert) ich denke allerdings es der Fehler liegt tiefer irgendwo bei Windows.
First, solve the problem. Then, write the code.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 00:44
Woran erkennst du Fälle, bei denen es nicht klappt? Win7 gibt Programmen nicht mehr unendlich Zeit in diesem Message-Handler, so dass dein Prozess u.U. unverrichteterdinge abgeschossen wird, wenn die Operation darin zu lange dauert.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 01:04
MSDN-Library durchsuchenWM_QUERYENDSESSION soll ohne Verzögerung beantwortet werden und nur in Ausnahmesituationen mit False. Somit ist diese Nachricht nur dann relevant, wenn es in der Anwendung zu einer kritischen Situation kommen könnte (z.B. beim Brennen einer CD)

Deine Sicherung solltest du beim Eintreffen von MSDN-Library durchsuchenWM_ENDSESSION durchführen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 4. Jul 2013 um 01:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 06:09
Viel sinnvoller ist es dem System auch zu sagen, dass man noch etwas zu tun hat und was. Das wird dann dem Benutzer auch angezeigt. Denn ansonsten drückt der ohnehin auf Shutdown erzwingen. Mehr dazu findest du hier:
Shutdown allgemein:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
ShutdownBlockReasonCreate:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 07:49
MSDN-Library durchsuchenWM_QUERYENDSESSION soll ohne Verzögerung beantwortet werden
U.u. könntest Du Deine Sicherung in einem separaten Thread starten und die Funktion sofort zurückkehren lassen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 08:28
MSDN-Library durchsuchenWM_QUERYENDSESSION soll ohne Verzögerung beantwortet werden
U.u. könntest Du Deine Sicherung in einem separaten Thread starten und die Funktion sofort zurückkehren lassen.
Wozu?

Einfach die Sicherung bei der Message MSDN-Library durchsuchenWM_ENDSESSION starten (so wie es in der MSDN-Dokumentation steht)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
rob60

Registriert seit: 11. Mai 2009
72 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 4. Jul 2013, 17:24
So hoffe ich empfange die Message mit diesem code richtig:
Code:
  private
    procedure WMENDSESSION(var M: TWMENDSESSION); message WM_ENDSESSION;

procedure TForm1.WMENDSESSION(var M: TWMENDSESSION);
begin
inherited;
  //Sicherung; // sollte zeitlich eigentlich nicht ins gewicht fallen aber sicher ist sicher
  windows.Beep(800,400);

  M.Result := 1; // Bestätigt das Herunterfahren (WICHTIG!)
  Close;
end;
Der Code funktioniert nun wie vorher im offenen zustand und im minimierten zustand falls das programm im autostart gestartet wurde und nachträglich minimiert. Wenn es minimiert gestartet wird funktioniert er nie und wenn es von hand geöffnet wird und dann minimiert funktioniert er selten. Ich bin ratlos

Da die Sicherung(nur ein kleiner Dateizugriff) sowieso nicht lange dauert denke ich brauche ich auch keine Begründung für den Nutzer zudem erscheint mein Programm da garnicht und wird schon vorher beendet.
First, solve the problem. Then, write the code.
  Mit Zitat antworten Zitat
rob60

Registriert seit: 11. Mai 2009
72 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 5. Jul 2013, 00:21
Okay das Problem wurde anderweitig gelöst(Speicherung bei jeder Veränderung der Daten und critical selections für jeden thread) zwar nicht schön aber dafür zuverlässig, falls doch noch jemand eine elegantere Lösung zur Speicherung von Daten beim herunterfahren weiss würde ich mich natürlich freuen.
First, solve the problem. Then, write the code.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Herunterfahren im minimierten Zustand erkennen

  Alt 5. Jul 2013, 01:18
Ich finde deine jetzige Lösung klingt erheblich schöner! (Man denke z.B. mal an so Nettigkeiten wie Stromausfälle oder BSODs. Da sendet Windows nix mehr ) Der Trend geht zudem auch immer mehr in die Richtung, dass ein Programm es nicht mehr so wirklich genau in der Hand hat, ob und wann und wie lange es läuft, bzw. gar welche Teile von ihm laufen. Man schaue sich mal die Mobile-Welt an. Ich gebe gerne zu, dass die für den Desktop nicht Modell stehen sollte, aber selbst solche Ausfälle wie o.g. sind schon Grund genug zum "direkt" sichern. (Zwar werkeln dann auch noch diverse Caches mit, die die eigentliche Ausführung verzögern, dennoch ist man aber zumindest auf einer etwas sichereren Seite.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 12:51 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