AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

Ein Thema von Harry Stahl · begonnen am 15. Jun 2015 · letzter Beitrag vom 16. Jun 2015
Antwort Antwort
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 08:16
Ja die Message gibt es.

Eine schnelle Suche ergab:

WM_ENDSESSION message

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

In den Kommentare steht aber, dass man evtl. nur sehr wenig Zeit zur Verfügung hat bis der eigene Prozess abgewürgt wird.
Ich würde da eher einen Ticken früher sichern, egal ob sich der Benutzer des Rechners es anders überlegt und doch nicht herunterfährt.

WM_QUERYENDSESSION message

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

Notfalls kann man den Shutdown verhindern indem der Rückgabewert auf False gesetzt wird.

Findet sich auch schon im Forum:
Hier im Forum suchenAnwendung beenden bei Windows Shutdown (WM_QueryEndSession)
Chris

Geändert von Photoner (16. Jun 2015 um 08:38 Uhr) Grund: Antwort war zu kurz.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#2

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 10:19
[QUOTE=Photoner;1305223]Ja die Message gibt es.

Eine schnelle Suche ergab:

WM_ENDSESSION message

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

Ich glaube, es geht hier nicht das Herunterfahren. Die Notebooks schalten die Bildschirm ab und sind in einer Art Energiesparmodus. Ein Tastendruck und sie sind direkt wieder da. Allerdings wird hier ein Anmeldebildschirm angezeigt (wo ich aber kein Passwort erneut eingeben muss, da ich das so eingestellt habe). Also wird es eher um eine Abmeldenachricht gehen. Oder gibt es auch eine spezielle, ich gehen jetzt in den Energiespar-Modus Nachricht?

Die Clients empfangen jedenfalls keine Nachrichten vom Server, wenn sie in diesem Energiesparmodus sind (hier im Beispiel Windows 8.1 auf dem Surface Pro 3).
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#3

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 10:27
Oh weh, 6 Jahre her und schon vergessen...

Bei dieser Diskussion kam eine dunkle Erinnerung hoch und siehe da, hatte vor längerer Zeit diese Problematik in einer anderen Client/Server Anwendung schon mal eingebaut, also für alle, die das evtl. mal brauchen könnten, hier, wie es geht:

Delphi-Quellcode:
procedure TF_Main.WMPowerBroadcast(var MyMessage: TMessage);
begin
  if MyMessage.Msg = WM_POWERBROADCAST then begin
    // windows powermanagement message

    if (MyMessage.WParam = PBT_APMSUSPEND) or
       (MyMessage.WParam = PBT_APMSTANDBY) or
       (MyMessage.WParam = PBT_APMQUERYSUSPEND) or
       (MyMessage.WParam = PBT_APMQUERYSTANDBY)
    then begin
      // Hier hin, was getan werden muss, bevor Windows in den Standby darf,
      // z.B. Netzwerk- oder Datenbankverbindungen trennen, Timer abstellen, etc.
      // Seit Vista hat man hier nur noch max. 2 Sekunden Zeit was zu erledigen.

      if NetFileMode then begin
        mnu_CloseMainFileClick (self);
      end;

      MyMessage.Result := 1; // Standby/Ruhezustand erlauben
      // MyMessage.Result := BROADCAST_QUERY_DENY; // Standby/Ruhezustand verweigern

    end
    else
    if (MyMessage.WParam = PBT_APMRESUMECRITICAL) or
       (MyMessage.WParam = PBT_APMRESUMESUSPEND) or
       (MyMessage.WParam = PBT_APMRESUMESTANDBY)
    then begin
      // Windows kommt aus dem Standby/Ruhezustand wieder.
      // Hier z.B. Verbindungen wiederherstellen.
      hs_delay (2000, True);
      if LastNetFile <> 'then begin
        if EstablishServerConnection = 'OKthen begin
          GetFileFromServer (AsStr (['UserId=' + MyNetUserID, 'cmd=GetThisFile', 'Password=' + LastPW, 'FileName=' + LastNetFile]));
        end;
        LastNetFile := '';
      end;
    end;
  end;

  inherited;

end;
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#4

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 10:54
Die Clients empfangen jedenfalls keine Nachrichten vom Server, wenn sie in diesem Energiesparmodus sind (hier im Beispiel Windows 8.1 auf dem Surface Pro 3).
Voher aufwecken mit Wake-On-Lan?

https://technet.microsoft.com/de-de/...(v=ws.10).aspx

Wenn es denn geht.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#5

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 11:14
Wobei ich feststellen muss, dass man sich jetzt wohl für die Broadcast-Nachricht explizit registrieren muss, um diese zu erhalten (war früher definitiv nicht so).

Habe hier weitere Informationen dazu gefunden:

http://stackoverflow.com/questions/1...-use-in-delphi

Allerdings meckert der Compiler hier:

FHPOWERNOTIFY := RegisterPowerSettingNotification(Handle,
@GUID_MONITOR_POWER_ON, DEVICE_NOTIFY_WINDOW_HANDLE);

und sagt TGUID und Pointer seien Inkompatible Typen

Die Variable ist als

const
GUID_MONITOR_POWER_ON: TGUID = '{02731015-4510-4526-99e6-e5a17ebd1aea}';

definiert. Wie geht's richtig?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#6

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 11:22
Wobei es mehrere GUIDS gibt. Welche mag wohl die richtige für den Energiesparmodus sein:
Delphi-Quellcode:
  GUID_POWERSCHEME_PERSONALITY: TGUID = '{245d8541-3943-4422-b025-13A784F679B7}';
  GUID_MIN_POWER_SAVINGS: TGUID = '{8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c}';
  GUID_MAX_POWER_SAVINGS: TGUID = '{a1841308-3541-4fab-bc81-f71556f20b4a}';
  GUID_TYPICAL_POWER_SAVINGS: TGUID = '{381b4222-f694-41f0-9685-ff5bb260df2e}';
  GUID_ACDC_POWER_SOURCE: TGUID = '{5d3e9a59-e9D5-4b00-a6bd-ff34ff516548}';
  GUID_BATTERY_PERCENTAGE_REMAINING: TGUID = '{a7ad8041-b45a-4cae-87a3-eecbb468a9e1}';
  GUID_IDLE_BACKGROUND_TASK: TGUID = '{515c31d8-f734-163d-a0fd-11a08c91e8f1}';
  GUID_SYSTEM_AWAYMODE: TGUID = '{98a7f580-01f7-48aa-9c0f-44352c29e5C0}';
  GUID_MONITOR_POWER_ON: TGUID = '{02731015-4510-4526-99e6-e5a17ebd1aea}';
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 11:37
Delphi-Quellcode:
function RegisterPowerSettingNotification(const hRecipient: THandle;
  const PowerSettingGuid: TGUID; const Flags: DWORD): HPOWERNOTIFY; stdcall;
Lass das mit dem @. Parameter ist vom Typ TGUID.

PBT_APMSUSPEND event

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
Chris

Geändert von Photoner (16. Jun 2015 um 11:46 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#8

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 11:52
Das hatte ich natürlich auch schon gemacht und dennoch eine Fehlermeldung erhalten. Gerade habe ich aber gesehen, dass diese Fehlermeldung sich dann auf den Rückgabewert bezog: "Inkompatible Typen NativeUInt und Pointer".


FHPOWERNOTIFY: THandle;

Das muss also ein Pointer statt ein Thandle sein.

Geändert von Harry Stahl (16. Jun 2015 um 11:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#9

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung

  Alt 16. Jun 2015, 12:39
Wobei es mehrere GUIDS gibt. Welche mag wohl die richtige für den Energiesparmodus sein:
Delphi-Quellcode:
  GUID_POWERSCHEME_PERSONALITY: TGUID = '{245d8541-3943-4422-b025-13A784F679B7}';
  GUID_MIN_POWER_SAVINGS: TGUID = '{8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c}';
  GUID_MAX_POWER_SAVINGS: TGUID = '{a1841308-3541-4fab-bc81-f71556f20b4a}';
  GUID_TYPICAL_POWER_SAVINGS: TGUID = '{381b4222-f694-41f0-9685-ff5bb260df2e}';
  GUID_ACDC_POWER_SOURCE: TGUID = '{5d3e9a59-e9D5-4b00-a6bd-ff34ff516548}';
  GUID_BATTERY_PERCENTAGE_REMAINING: TGUID = '{a7ad8041-b45a-4cae-87a3-eecbb468a9e1}';
  GUID_IDLE_BACKGROUND_TASK: TGUID = '{515c31d8-f734-163d-a0fd-11a08c91e8f1}';
  GUID_SYSTEM_AWAYMODE: TGUID = '{98a7f580-01f7-48aa-9c0f-44352c29e5C0}';
  GUID_MONITOR_POWER_ON: TGUID = '{02731015-4510-4526-99e6-e5a17ebd1aea}';
Hier gibt es eine Beschreibung: https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Obwohl es mit dem Monitor-Power_on durchaus geht, scheint mir evtl. hier noch "GUID_SYSTEM_AWAYMODE" am passendsten zu sein. Muss ich mal testen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08: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