`
cfeers
  • 浏览: 135419 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用Delphi编写自动关闭Windows信使服务窗体程序

 
阅读更多

使用Delphi编写自动关闭Windows信使服务窗体程序

    Windows信使服务是Windows为了方便尽心系统管理而设置的一项工具,初衷是很好的可以使得管理员方便的在局域网内发布消息给各个用户。
    可是却常常被一个菜的不能再菜的家伙利用,到处扰乱别人的学习和生活。每每让人在用电脑的同时突然弹出一个确认对话框。如果只是在办公的还好,尽管是最上层窗口,只要关闭了即可。可是如果是在CS,则会突然跳出CS,要求再去点击确认,让人烦躁的没办法。
    如下程序使用Delphi编写可以自动识别信使服务的弹出窗口并自动关闭。内部使用了Timer空间来定时识别信使服务窗体。原本还打算用线程,可是后来调试出了点问题就把这个垃圾功能去掉了。

unit untmain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, untclosew, ExtCtrls, winprocs;

type
  Tfrmmain = class(TForm)
    Label1: TLabel;
    edtcount: TEdit;
    btnok: TButton;
    Timer1: TTimer;
    procedure btnokClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    closew:tclosew;
  end;

var
  frmmain: Tfrmmain;

implementation

{$R *.dfm}

procedure Tfrmmain.btnokClick(Sender: TObject);
begin
if btnok.caption='启动服务' then
  begin
    btnok.Caption:='停止服务';
    timer1.Enabled:=true;
  end
else
  begin
    btnok.Caption:='启动服务';
    timer1.Enabled:=false;
    closew.suspend;
  end;
closew.FreeOnTerminate:=true;
end;

procedure Tfrmmain.Timer1Timer(Sender: TObject);
var
hwndwin:hwnd;
begin
hwndwin:=winprocs.FindWindow(nil,pchar('信使服务 '));
if hwndwin<>0 then
  begin
    closew.Resume;
  end
else
  begin
    if not(closew.Suspended) then
      closew.suspend;
  end;
end;

procedure Tfrmmain.FormCreate(Sender: TObject);
begin
closew:=tclosew.Create(true);
end;

procedure Tfrmmain.FormDestroy(Sender: TObject);
begin
if closew<>nil then
  begin
    closew.FreeOnTerminate:=true;
    closew.Terminate;
  end;
end;

end.

 

unit untclosew;

interface

uses
  Classes, sysutils, windows, winprocs, messages;

type
  tclosew = class(TThread)
  private
  protected
    procedure update;
    procedure Execute; override;
  end;

implementation

uses untmain;

procedure tclosew.Execute;
var
hwndwin:hwnd;
begin
while not(terminated) do
begin
  hwndwin:=winprocs.FindWindow(nil,pchar('信使服务 '));
  if hwndwin<>0 then
    begin
      winprocs.SendMessage(hwndwin,WM_CLOSE,0,0);
      synchronize(update);
    end;
end;
end;

procedure tclosew.update;
var
i:integer;
begin
i:=strtoint(untmain.frmmain.edtcount.text);
i:=i+1;
untmain.frmmain.edtcount.text:=inttostr(i);
end;

end.

/////////////////////////////////////////////////
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics