3 Stimmen

Delphi: Wie reagiert man auf WM_SettingChange/WM_WinIniChange?

Ich muss wissen, wann meine Bewerbung eine WM_SETTINGCHANGE Nachricht (früher bekannt als WM_WININICHANGE ).

Das Problem ist, dass die Nachrichtenpumpe in TAnwendung schickt sie in ein schwarzes Loch (Standardhandler), bevor ich sie sehen kann:

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;

Das Verfahren CheckIniChange() löst kein Ereignis aus, mit dem ich umgehen kann, und auch nicht Mouse.SettingChanged() .

Und sobald der Codepfad die Default wird es über die DefWindowProc Abflussloch, um nie wieder gesehen zu werden (da das erste, was die WndProc tut, das Setzen des Message.Result auf Null.

Ich hatte gehofft, einem TApplicationEvents.OnMessage-Ereignis einen Handler zuzuweisen:

procedure TdmGlobal.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
   case Msg.message of
   WM_SETTINGCHANGE:
      begin
         // Code
      end;
   end;
end;

Das OnMessage-Ereignis wird jedoch nur für Nachrichten ausgelöst, die über die Nachrichtenpumpe eingehen. Da die WM_SETTINGCHANGE Nachricht "bearbeitet" wird, sieht sie nie die

PeekMessage
TranslateMessage
DispatchMessage

System.

Wie kann ich auf die Windows-Sendung reagieren? WM_SETTINGCHANGE ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X