加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:31:21 所属栏目:Windows 来源:网络整理
导读:我正在尝试回复一些窗口和应用程序消息,但我多次得到它们. 例如,当使用WM_TIMECHANGE更改系统日期时,我编写以下代码以显示消息框. WMTimeChange被执行多次,我看到多个(大多数时候是两三个)消息框一个接一个地出现.也许,我错过了什么? unit Unit1;interfaceu
我正在尝试回复一些窗口和应用程序消息,但我多次得到它们.

例如,当使用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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读