Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Frage zum Disconnect mit Indy und einer TCP/IP Verbindung (https://www.delphipraxis.net/185479-frage-zum-disconnect-mit-indy-und-einer-tcp-ip-verbindung.html)

Harry Stahl 16. Jun 2015 10:19

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung
 
[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).

BUG 16. Jun 2015 10:26

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

Zitat von Harry Stahl (Beitrag 1305234)
Auch ein interessanter Ansatz. Das würde sogar "Offline"-Arbeiten mit dem Datenbestand ermöglichen.

Wenn im Offline-Betrieb geschreiben werden soll, wird es sehr schnell wieder kompliziert. Manuelles Zusammenführen ist mühsam, vollautomatisches könnte zu Datenverlust führen.

Zitat:

Zitat von Harry Stahl (Beitrag 1305237)
Oder gibt es auch eine spezielle, ich gehen jetzt in den Energiespar-Modus Nachricht?

Natürlich :mrgreen:

Harry Stahl 16. Jun 2015 10:27

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung
 
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 = 'OK' then begin
          GetFileFromServer (AsStr (['UserId=' + MyNetUserID, 'cmd=GetThisFile', 'Password=' + LastPW, 'FileName=' + LastNetFile]));
        end;
        LastNetFile := '';
      end;
    end;
  end;

  inherited;

end;

Harry Stahl 16. Jun 2015 10:32

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung
 
[QUOTE=BUG;1305239]
Zitat:

Zitat von Harry Stahl (Beitrag 1305234)
Natürlich :mrgreen:

Danke Bug, genau das war gemeint.

mm1256 16. Jun 2015 10:47

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

vielen Dank! Das ist genau das was ich gesucht habe! :thumb:

Photoner 16. Jun 2015 10:52

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

Zitat von mm1256 (Beitrag 1305245)
Hallo,

vielen Dank! Das ist genau das was ich gesucht habe! :thumb:

Das kam jetzt aber aus dem nichts :)

BadenPower 16. Jun 2015 10:54

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

Zitat von Harry Stahl (Beitrag 1305237)
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.

Harry Stahl 16. Jun 2015 11:14

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung
 
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?

Harry Stahl 16. Jun 2015 11:22

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung
 
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}';

Photoner 16. Jun 2015 11:37

AW: Frage zum Disconnect mit Indy und einer TCP/IP Verbindung
 
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


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

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