J'ai besoin de savoir quand mon application reçoit un message WM_SETTINGCHANGE
(anciennement connu sous le nom WM_WININICHANGE
).Delphi: Comment répondre à WM_SettingChange/WM_WinIniChange?
Le problème est que la pompe de message dans TApplication envoie dans un trou noir (gestionnaire par défaut) avant que je puisse avoir une chance de le voir:
procedure TApplication.WndProc(var Message: TMessage);
...
begin
Message.Result := 0;
for I := 0 to FWindowHooks.Count - 1 do
if TWindowHook(FWindowHooks[I]^)(Message) then Exit;
CheckIniChange(Message);
with Message do
case Msg of
WM_SETTINGCHANGE:
begin
Mouse.SettingChanged(wParam);
Default; <----------------------*poof* down the sink hole
end;
...
end;
...
end;
La procédure CheckIniChange()
ne jette pas un événement je peux gérer, ni ne Mouse.SettingChanged()
.
Et une fois le chemin de code atteint Default
, il est envoyé dans le trou de vidange DefWindowProc
, ne jamais être revu (depuis la première chose que l'WndProc fait est réglé le Message.Result
à zéro.
j'espérais attribuer un gestionnaire à un événement TApplicationEvents.OnMessage:.
procedure TdmGlobal.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
case Msg.message of
WM_SETTINGCHANGE:
begin
// Code
end;
end;
end;
Mais l'événement ne OnMessage est jeté pour les messages qui passent par la pompe de message Depuis le message WM_SETTINGCHANGE
est « manipulé », il ne voit jamais le
PeekMessage
TranslateMessage
DispatchMessage
système.
Comment puis-je répondre à la diffusion de Windows WM_SETTINGCHANGE
?
' Application.OnSettingChange' travaillé pour moi en D7. Je n'ai pas pu obtenir le message habituel «... message WM_SETTINGCHANGE; – Slashback