如何知道当前系统里的ie浏览器的个数?(300分)

  • 主题发起人 主题发起人 wqhatnet
  • 开始时间 开始时间
W

wqhatnet

Unregistered / Unconfirmed
GUEST, unregistred user!
如何知道当前系统里的ie浏览器的个数?
如何将他们全部关闭
全部刷新?
谢谢
 
你使用这段代码.
function GetTitle(Hwnd:THandle; Param:Pointer):Boolean; stdcall;
var
TitleStr:string;
begin
SetLength(TitleStr,300);
GetWindowText(Hwnd,PChar(TitleStr),300);
if Pos('Microsoft Internet Explorer',TitleStr)>0then//判断是不是IE窗口,根据窗口标题. 如果你想得到总数,在这里计数累加就好.
begin
Form1.Memo1.Lines.Add(IntToStr(Hwnd)+': '+TitleStr);//显示信息
PostMessage(Hwnd,WM_CLOSE,0,0);//关闭窗口.如果想关闭,使用本行.
end;
Result:=True;
end;

procedure TForm1.Button2Click(Sender:TObject);
begin
memo1.clear;
EnumWindows(@GetTitle,0);//找出所有的窗口.
end;
 
楼上办法不是太好感觉如果特殊的一些东东没有'Microsoft Internet Explorer'不就每用了吗?
还是获得进程名称合适!~ IEXPLORE.EXE
 
那就使用这样的代码.
procedure TForm1.Button1Click(Sender:TObject);
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop:BOOL;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
No:Integer;//
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
no:=0;//
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase('IEXPLORE.EXE'))or(UpperCase(FProcessEntry32.szExeFile)=UpperCase('IEXPLORE.EXE'))) then
begin
Inc(no);//计数
TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),FProcessEntry32.th32ProcessID),0);//关闭..
end;
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
 
给出代码 调试通过 给分吧 呵呵!~
unit Unit1;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,tlhelp32, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID ,i: integer;
s:string;
begin
i:=0;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
Memo1.clear;
while Ret do
begin
Memo1.lines.add(FProcessEntry32.szExeFile);
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='IEXPLORE.EXE' then
begin
i:=i+1;
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1);
s:='';
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
Edit1.Text:='一共发现 '+inttostr(i)+'个被杀';
end;
end.
 
根据句柄关闭窗体的函数
提醒一下,我想不起来了
然后就结分
 
进程数不一定等于窗口数,这个问题比较麻烦
 
wanderld 说的有道理 恩 比较麻烦 不过 他们的父进程还是'IEXPLORE.EXE' 不关开多少子窗口杀他爹不是一样的吗?呵呵!~~~~~~~~~~
关于关闭进程 我的例子里有了
if s='IEXPLORE.EXE' then //如果进程名是这个'IEXPLORE.EXE' 就....
begin
i:=i+1;
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1); // 杀
s:='';
end;
 
回家过中秋了!!
 
多人接受答案了。
 
后退
顶部