![]() |
Rückgabewert für Message WM_APPCOMMAND
Hi,
in der WndProc-Methode reagiere ich auf das Ereignis WM_APPCOMMAND. Im MSDN steht man sollte auf diese Message True zurückliefern. Aber wie mache ich das? Ich dachte mir Message.Result zu setzen, aber mit welchem Wert? Ich kann ja nicht einfach ein Delphi-True in Integer konvertieren, API-Trues sind doch irgendwie anders. Wisst ihr wie das geht? MSDN ( ![]() Zitat:
Delphi-Quellcode:
procedure TForm2.WndProc(var Message: TMessage);
begin inherited WndProc(Message); if (Message.Msg = WM_APPCOMMAND) then begin //... end; end; |
AW: Rückgabewert für Message WM_APPCOMMAND
Zitat:
Code:
Weitere Einzelheiten dazu gab es
procedure TForm1.WndProc(var Message: TMessage);
const WM_APPCOMMAND = $319; WM_APPCOMMAND_MEDIA_NEXTTRACK = 11; //Go to next track. WM_APPCOMMAND_MEDIA_PREVIOUSTRACK = 12; //Go to previous track. WM_APPCOMMAND_MEDIA_STOP = 13; //Stop playback. WM_APPCOMMAND_MEDIA_PLAY_PAUSE = 14; //Play or pause playback. var Handled: boolean; begin with Message do begin if (Msg = WM_APPCOMMAND) then begin case (LParamHi and $FFF) of WM_APPCOMMAND_MEDIA_STOP: begin frmNowPlaying.Stop(); Handled := TRUE; end; WM_APPCOMMAND_MEDIA_PLAY_PAUSE: begin if FPlayerStatus = psPlay then frmNowPlaying.Pause() else frmNowPlaying.Play(); Handled := TRUE; end; WM_APPCOMMAND_MEDIA_PREVIOUSTRACK: begin frmNowPlaying.Previous(); Handled := TRUE; end; WM_APPCOMMAND_MEDIA_NEXTTRACK: begin frmNowPlaying.Next(); Handled := TRUE; end; else { Unknown command - not handled here } Handled := FALSE; end; Result := LongInt(Handled); end else { Not WM_APPCOMMAND - we're not interested } inherited; end; end; ![]() |
AW: Rückgabewert für Message WM_APPCOMMAND
Boolean in LongInt casten und in Message-Result setzen. Das war das was ich wissen musste. Danke :thumb:
EDIT: Genau so wie du frage ich WM_APPCOMMAND ab um die Sondertasten von Tastaturen sowie die Knöpfe von Windows Media Fernbedienungen abzufragen. Das funktioniert soweit auch alles. Nur wird bei den Lautstärke leiser/lauter die System-Lautstärke geändert. Ich dachte das würde Windows durch den Rückgabewert nun unterlassen. Leider ist dem nicht so. Weiß jemand wie ich Windows sage "Lass die Sys-Lautstärke in Ruhe mein Programm verändert seine eigene Lautstärke-Regelung" so wie es z. B. iTunes auch macht?
Delphi-Quellcode:
EDIT 2: Problem gelöst. inherited WndProc(); darf - wie in deinem Code - nur aufgerufen werden wenn es sich um keine WM_APPCOMMAND-Nachricht handelt.
TCsWindowsAppCommand = (
cwacVolumeMute = APPCOMMAND_VOLUME_MUTE, cwacVolumeDown = APPCOMMAND_VOLUME_DOWN, cwacVolumeUp = APPCOMMAND_VOLUME_UP, cwacMediaPlay = APPCOMMAND_MEDIA_PLAY ); procedure TForm2.WndProc(var Message: TMessage); var cmd: TCsWindowsAppCommand; begin if (Message.Msg = WM_APPCOMMAND) then begin cmd := TCsWindowsAppCommand(GET_APPCOMMAND_LPARAM(Message.LParam)); case cmd of cwacMediaPlay: ListBox1.Items.Add('Play'); cwacVolumeDown: ListBox1.Items.Add('Vol down'); cwacVolumeUp: ListBox1.Items.Add('Vol up'); end; Message.Result := LongInt(True); end else Message.Result := LongInt(False); inherited WndProc(Message); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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