Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PowerButton-Event von Windows abfangen und auswerten (https://www.delphipraxis.net/137772-powerbutton-event-von-windows-abfangen-und-auswerten.html)

himitsu 28. Jul 2009 20:58

Re: PowerButton-Event von Windows abfangen und auswerten
 
Wenn die Powertaste abgestellt wurde, dann wird doch auch keine WM_POWERBROADCAST-Botschaft verschickt, da dann ja nichts passiert.

WM_POWERBROADCAST ist nur eine Reaktion auf das Drücken des Tasters oder auf irgendwas, welches den PC z.B. runterfahren will ... diese Nachricht hat also nix mit der Taste selber zu tun.

Das drücken des Gehäuse-Power-Knöpfchens dürfte eher irgendeinen Interupt auslösen und an den kommt man wohl nur über einen Treiber? :gruebel:

hathor 29. Jul 2009 05:56

Re: PowerButton-Event von Windows abfangen und auswerten
 
...oder man fragt den Embedded Controller direkt ab - das Byte ist aber bei jedem PC/Notebook an einer anderen Stelle, denn es gibt keine Normung.

himitsu 29. Jul 2009 07:20

Re: PowerButton-Event von Windows abfangen und auswerten
 
Zitat:

Zitat von hathor
...oder man fragt den Embedded Controller direkt ab - das Byte ist aber bei jedem PC/Notebook an einer anderen Stelle, denn es gibt keine Normung.

irgendwer muß ja wissen wo es liegt ... das BIOS vielleicht/vermutlich?

rakekniven 29. Jul 2009 07:28

Re: PowerButton-Event von Windows abfangen und auswerten
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von rakekniven
Unser Fenster läuft Fullscreen ohne Border und Icons. Ist es dann noch ein Toplevel-Fenster?

Ja, dann ist es ein Toplevel Fenster.

Bei meiner Recherche habe ich den Begriff "toplevel" gefunden und dass nur solche Anwendungen Windows-Messages wie WM_POWERBROASCAST empfangen können. Mein Testprogramm ist Form1.Align:=alClient und Form1.BorderIcons:=[].
Darauf habe ich einen Test-Button der die Message sendet. Darauf reagiert meine Prozedur

Delphi-Quellcode:
procedure WMPowerBroadcast(var Msg:TWMPower);
  message WM_POWERBROADCAST;


procedure TForm1.WMPowerBroadcast(var Msg:TWMPower);
begin
  Msg.Result:=BROADCAST_QUERY_DENY;
  ShowMessage('procedure TForm1.WMPowerBroadcast(var Msg:TWMPower);');
end;
wenn ich den Test-Button im Programm drücke, aber nicht wenn ich den PowerButton drücke und auch nicht, wenn ich den "Ausschalten"-Button drücke, der auf Start > Computer ausschalten... erscheint (wie weiter oben jmd schrieb).



Eine andere Empfangs-Prozedur, die ich in meiner Nachforschung entdeckt habe ist:

Delphi-Quellcode:
procedure wndproc(var msg:Tmessage);
begin
  inherited;
  if msg.msg = WM_POWERBROADCAST then
  begin
    ShowMessage('procedure wndproc(var msg:Tmessage);');
    msg.result:=BROADCAST_QUER_DENY;
  end;
end;
Diese wird beim manuellen senden der Message gar nicht erst aufgerufen. Verwende ich WndProc falsch oder überschreibe ich sie nicht richtig?



Zitat:

Zitat von himitsu
Wenn die Powertaste abgestellt wurde, dann wird doch auch keine WM_POWERBROADCAST-Botschaft verschickt, da dann ja nichts passiert.

WM_POWERBROADCAST ist nur eine Reaktion auf das Drücken des Tasters oder auf irgendwas, welches den PC z.B. runterfahren will ... diese Nachricht hat also nix mit der Taste selber zu tun.

Das drücken des Gehäuse-Power-Knöpfchens dürfte eher irgendeinen Interupt auslösen und an den kommt man wohl nur über einen Treiber? :gruebel:

Auf dem Delphi-PC habe ich die Taste so eingestellt, dass das Auswahl-Menü erscheint, damit ich merke, ob die Taste reagiert hat. Diese Einstellung ist im Grund aber egal, da auf den Druck der Taste reagiert werden soll und nicht auf eines der möglichen Events.
Wie weiter oben in diesem Post genauer beschrieben, reagiert das Programm aber auch nicht, wenn ich auf "Ausschalten" gehen und somit, laut deiner Aussage, das WM_POWERBROADCAST-Event auslöse.


Zitat:

Zitat von hathor
...oder man fragt den Embedded Controller direkt ab - das Byte ist aber bei jedem PC/Notebook an einer anderen Stelle, denn es gibt keine Normung.

Zitat:

Zitat von himitsu
Zitat:

Zitat von hathor
...oder man fragt den Embedded Controller direkt ab - das Byte ist aber bei jedem PC/Notebook an einer anderen Stelle, denn es gibt keine Normung.

irgendwer muß ja wissen wo es liegt ... das BIOS vielleicht/vermutlich?

Der Power-Taster ist direkt auf das Netzteil verdrahtet (lt. unserem PC-Hersteller). Und das Netzteil ist mit dem Mainboard verbunden. Welcher Chip/Bus das ist, wissen wir nicht genau, aber Windows bekommt es ja mit.

Es gibt eine Message, laut meinen Recherchen-Quellen ist es WM_POWERBROADCAST, was auch schon in einem älteren Thread im Forum (erfolgreich?) in einem ähnlichen Zusammenhang verwendet wurde.

edit:
Dieser Thread ist es: http://www.delphipraxis.net/internal...ht=powerbutton


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr.
Seite 2 von 2     12   

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