AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Standby zurück wird nicht erkannt?
Thema durchsuchen
Ansicht
Themen-Optionen

Standby zurück wird nicht erkannt?

Ein Thema von schwa226 · begonnen am 15. Jun 2009 · letzter Beitrag vom 16. Jan 2010
Antwort Antwort
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

Re: Standby zurück wird nicht erkannt?

  Alt 30. Okt 2009, 21:56
Ergänzung:

Ich habe es auch noch mit folgendem Code versucht:
Delphi-Quellcode:
unit NonVCL_WM;

interface

uses
  Windows,Classes,Messages;

type
  { Our class derived from TComponent
    or another ancestor class }

  TMyClass = class(TComponent)
  private
    fHWnd: HWND;
      { field to store the window handle }
  protected
    procedure WndMethod(var Msg: TMessage); virtual;
      { window proc - called by Windows to handle
        messages passed to our hidden window }

  public
     constructor Create(AOwner: TComponent); override;
       { create hidden window here: store handle in fHWnd}
     destructor Destroy; override;
       { free hidden window here }
  end;

var
  MyMessageClass : TMyClass;

implementation

uses
  PowerWatch,SysUtils;

function TranslatePowerBroadcast(const Msg: Cardinal): string;
begin
  case Msg of
    WM_POWERBROADCAST: Result := 'WM_POWERBROADCAST';

    PBT_APMQUERYSUSPEND: Result := 'PBT_APMQUERYSUSPEND, Info: Request for permission to suspend. In Windows Server 2008 and Windows Vista, use the SetThreadExecutionState function instead.';
    PBT_APMQUERYSTANDBY: Result := 'PBT_APMQUERYSTANDBY';

    PBT_APMQUERYSUSPENDFAILED: Result := 'PBT_APMQUERYSUSPENDFAILED';
    PBT_APMQUERYSTANDBYFAILED: Result := 'PBT_APMQUERYSTANDBYFAILE, Info: Suspension request denied. In Windows Server 2008 and Windows Vista, use SetThreadExecutionState instead.D';

    PBT_APMSUSPEND: Result := 'PBT_APMSUSPEND, Info: System is suspending operation.';
    PBT_APMSTANDBY: Result := 'PBT_APMSTANDBY';

    PBT_APMRESUMECRITICAL: Result := 'PBT_APMRESUMECRITICAL, Info: Operation resuming after critical suspension. In Windows Server 2008 and Windows Vista, use PBT_APMRESUMEAUTOMATIC instead.';
    PBT_APMRESUMESUSPEND: Result := 'PBT_APMRESUMESUSPEND, Info: Operation is resuming from a low-power state. This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key.';
    PBT_APMRESUMESTANDBY: Result := 'PBT_APMRESUMESTANDBY';

    //PBTF_APMRESUMEFROMFAILURE: Result := 'PBTF_APMRESUMEFROMFAILURE';

    PBT_APMBATTERYLOW: Result := 'PBT_APMBATTERYLOW, Info: Battery power is low. In Windows Server 2008 and Windows Vista, use PBT_APMPOWERSTATUSCHANGE instead.';
    PBT_APMPOWERSTATUSCHANGE: Result := 'PBT_APMPOWERSTATUSCHANGE, Info: Power status has changed.';
    //PBT_POWERSETTINGCHANGE: Result := 'PBT_POWERSETTINGCHANGE, Info: A power setting change event has been received.';

    PBT_APMOEMEVENT: Result := 'PBT_APMOEMEVENT, Info: OEM-defined event occurred. In Windows Server 2008 and Windows Vista, this event is not available because these operating systems support only ACPI; APM BIOS events are not supported.';
    PBT_APMRESUMEAUTOMATIC: Result := 'PBT_APMRESUMEAUTOMATIC, Info: Operation is resuming automatically from a low-power state. This message is sent every time the system resumes.';
  else
    Result := 'Unknown Message "'+IntToStr(Msg)+'"';
  end;
end;

constructor TMyClass.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  // Create hidden window using WndMethod as window proc
  fHWnd := AllocateHWnd(WndMethod);

end;

destructor TMyClass.Destroy;
begin

  // Destroy hidden window
  DeallocateHWnd(fHWnd);

  inherited Destroy;
end;

procedure TMyClass.WndMethod(var Msg : TMessage);
begin

  case Msg.Msg of

   WM_POWERBROADCAST: begin
    // windows powermanagement message

    FormPowerWatch.Memo1.Lines.Append(TimeToStr(now) + ' Msg: '+TranslatePowerBroadcast(Msg.Msg));
    FormPowerWatch.Memo1.Lines.Append(TimeToStr(now) + ' WParam: '+TranslatePowerBroadcast(Msg.WParam));
    FormPowerWatch.Memo1.Lines.Append('');
   end;

  end;

    // pass to DefWindowProc and record result
    Msg.Result := DefWindowProc(fHWnd, Msg.Msg,
      Msg.WParam, Msg.LParam);
end;

end.
(Die FormPowerWatch dient nurmehr als Dummy für das Memo, die WM Message wurde entfernt)

Jedoch auch hier wird nur das zurückkommen vom Standby erkannt. Nix mit PBT_APMSUSPEND! Nur PBT_APMRESUMEAUTOMATIC & PBT_APMRESUMESUSPEND.
Delphi 2010, Update 4 & 5
  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 09:55 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