为什么我会收到多个同类窗口消息?

前端之家收集整理的这篇文章主要介绍了为什么我会收到多个同类窗口消息?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试回复一些窗口和应用程序消息,但我多次得到它们.

例如,当使用WM_TIMECHANGE更改系统日期时,我编写以下代码显示消息框. WMTimeChange被执行多次,我看到多个(大多数时候是两三个)消息框一个接一个地出现.也许,我错过了什么?

unit Unit1;

interface

uses
  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs;

type
  TForm1 = class(TForm)
  protected
    procedure WMTimeChange(var Msg: TMessage) ; message WM_TIMECHANGE;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.WMTimeChange(var Msg: TMessage);
begin
    showmessage('Date/Time has changed!');
end;

end.

在Windows XP中测试.

编辑:只是为了澄清,我的意图是理解为什么会发生这种情况而不是如何绕过多个电话.无论如何,如果无法回答这个问题,我可能会接受一个答案.

EDIT2:删除了Delphi标签,因为它似乎不是Delphi问题.

解决方法

你的代码是正确的.听起来好像Windows正在多次发送WM_TIMECHANGE消息.

因此,您可以添加一个小的时间滞后比较,让您的信息每天只有1%触发一次,即或多或少15分钟:

type
  TForm1 = class(TForm)
  protected
    FWMTimeChangeTimeStamp: TDateTime;
    procedure WMTimeChange(var Msg: TMessage) ; message WM_TIMECHANGE;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.WMTimeChange(var Msg: TMessage);
begin
  if Now-FWMTimeChangeTimeStamp>0.01 then 
  begin
    showmessage('Date/Time has changed!');
    FWMTimeChangeTimeStamp := Now; 
  end;
end;

猜你在找的Windows相关文章