Ceci est une ancienne révision du document !
Interception d'un Message Windows
Ci dessous on cherche a intercepter le Message Windows WM_DEVICECHANGE
Trois étapes :
- Détournement de tous les messages grâce à
lclintf.AllocateHWnd(@MessageInterceptor);
- Tri et traitement des massages dans la procedure
MessageInterceptor
- Retransmission du message a la fin de la procedure
MessageInterceptor
avecAMessage.Result := DefWindowProc(FHandle, AMessage.Msg, AMessage.wParam, AMessage.lParam);
unit uTICDeviceChangeNotifier; {$mode objfpc}{$H+} interface uses Classes, forms, LazLogger, LCLIntf, SysUtils, windows; type { TTICDeviceChangeNotifier } TTICDeviceChangeNotifier = class(TObject) private FHandle: HWND; procedure MessageInterceptor(var AMessage: TMessage); protected public constructor Create; //override; destructor Destroy; override; published end; implementation { TTICDeviceChangeNotifier } constructor TTICDeviceChangeNotifier.Create; begin inherited Create; FHandle := lclintf.AllocateHWnd(@MessageInterceptor); end; destructor TTICDeviceChangeNotifier.Destroy; begin lclintf.DeallocateHWnd(FHandle); inherited Destroy; end; procedure TTICDeviceChangeNotifier.MessageInterceptor(var AMessage: TMessage); begin if (AMessage.Msg = WM_DEVICECHANGE) then DebugLn(TimeToStr(Time) + ' : ' + Format('[%0.4x] - [%0.4x] ', [AMessage.wParam, AMessage.lParam])); AMessage.Result := DefWindowProc(FHandle, AMessage.Msg, AMessage.wParam, AMessage.lParam); end; end.
Vous pourriez laisser un commentaire si vous étiez connecté.