AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

Ein Thema von Real_Nikotin · begonnen am 15. Mai 2013 · letzter Beitrag vom 15. Mai 2013
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 08:48
Soweit ich weiß entspricht das schnelle Herunterfahren bei Win8 dem Ruhezustand bis Win7. Da kommt auch kein EndSession, weil ja alles nur auf Platte geparkt wird. Beim Wiederanfahren ist der User ja auch immernoch angemeldet und nur gelockt.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 08:53
Versuch es mal mit WM_POWERBROADCAST
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Real_Nikotin

Registriert seit: 18. Jan 2006
9 Beiträge
 
#3

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 08:56
@Morphie: Genau diesen Bildschirm hätte ich wenigstens gerne

Ich hatte das auch erst mit dem Ruhezustand verglichen allerdings sind beim wiederanfahren unter Windows 8 alle Programme definitiv geschlossen und müssen neugestartet werden.
Die Anwendung läuft normalerweise im Hintergrund (nur im Tray sichtbar) und benötigt eigentlich keine manuellen Eingaben.

Ich glaube ich habe das Kernproblem aber bereits entdeckt. Ich habe versuchsweise eine normale VCL Anwendung mit einem sleep(10000) senden lassen und die UI erscheint.

Das Problem liegt also wohl im Windows Message Handling von Firemonkey.
Ich brauche OSX oder iOS momentan nicht ich könnte also auch auf VCL Komponenten zugreifen, bin mir aber jetzt nicht wirklich sicher ob ich überhaupt mit Firemonkey diese MEssages verarbeiten kann?!
  Mit Zitat antworten Zitat
Ulrich Berger

Registriert seit: 19. Jan 2004
Ort: Herten
29 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 09:06
Hallo,

also soweit ich weiß ist tatsächlich standardmäßig das schnelle Herunterfahren unter Windows 8 aktiviert. Dazu stand vor ein paar Wochen mal etwas bei heise online, damals ging es darum daß es zu Datenverlust kommen kann wenn während Windows sich in diesem Zustand befindet von einem anderen Betriebssystem aus etwas am Dateisystem geändert wird.

Gruß Uli
  Mit Zitat antworten Zitat
Real_Nikotin

Registriert seit: 18. Jan 2006
9 Beiträge
 
#5

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 09:31
Also Problem bestand wirklich nur dahingehend das Firemonkey keinen Windows Message Handler besitzt. Ich hatte das glatt vergessen

Hier eine kurze Lösung um auch unter Firemonkey auf die Message zu reagieren:

Delphi-Quellcode:
unit shut;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, FMX.Forms, FMX.Platform.Win, FMX.Types,
FMX.Layouts, FMX.Memo;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FHwnd: HWND;
    FOldWndProc: LONG;

    { Private-Deklarationen }
  public
    function WndProc(Hwnd: HWND; Msg:UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

function WindowProc(Hwnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := Form1.WndProc(Hwnd, Msg, wParam, lParam);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 FHwnd := FmxHandleToHwnd(Handle);
FOldWndProc := GetWindowLongPtr(FHwnd, GWL_WNDPROC);

SetWindowLongPtr(FHwnd, GWL_WNDPROC, NativeInt(@WindowProc));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLongPtr(FHwnd, GWL_WNDPROC, FOldWndProc);
end;

function TForm1.WndProc(Hwnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var TempList : TSTringList;
begin
Result := 0;

If Msg = WM_EndSession then
begin
    // BEREICH WAS BEIM SHUTDOWN PASSIEREN SOLL / Unabhängig von OnClose!
    sleep(10000);
    TempList := TStringList.Create;
    TEmpList.Add('TEST');
    TempList.SaveToFile(ExtractFilePath(ParamStr(0))+'Shutdown.txt');
    TempList.Free;
end;

Result := CallWindowProc(Ptr(FOldWndProc), Hwnd, Msg, wParam, lParam);
end;


end.
Vielleicht schaut mal einer drüber? Funktionieren tut es wie es soll aber vielleicht kennt jemand ne Ausnahme in der das so nicht funktionieren wird.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 10:08
Ich würde dringend dazu raten das ab Vista sauber mit ShutdownBlockReasonCreate zu lösen:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Nur so bekommt der Benutzer (deine Meldung) angezeigt warum dein Programm nicht abgeschossen werden und der Shutdown trotzdem durchgeführt werden soll.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 13:51
Mit regedit die Zeit in WaitToKillServiceTimeout verlängern.
Bei mir steht 12000 drin, was vermutlich 12 sec sind...

Delphi-Quellcode:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control]
"WaitToKillServiceTimeout"="12000"
Mit dem Tool UWT - Ultimate Windows Tweaker kann man das u.a. bequem einstellen.
http://www.thewindowsclub.com/ultima...indows-7-vista
Angehängte Grafiken
Dateityp: jpg UWT.jpg (124,5 KB, 9x aufgerufen)

Geändert von hathor (15. Mai 2013 um 14:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Windows 8 Schnelles Herunterfahren verhindert WMEndSession Messages?

  Alt 15. Mai 2013, 14:32
Die Timeouts zu verlängern wäre aber keine Lösung, sondern nur ein Verdecken des Problems auf Kosten des genervten Benutzers. Mit ShutdownBlockReasonCreate kann man das ganze sehr elegant lösen, also wozu an Systemeinstellungen herumschrauben?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 05:33 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