IE的类是什么,如何编一个程序来关闭IE(200分)(200分)

  • 主题发起人 主题发起人 ttyyuu
  • 开始时间 开始时间
T

ttyyuu

Unregistered / Unconfirmed
GUEST, unregistred user!
IE的类是什么,如何编一个程序来关闭IE(200分),因为IE的标题是不定的,我也知道用findwindow()找出句柄,用postmessage或sendmessage来关闭,但IE的类究竟是什么,请写详细程序,本人倾家荡产200分回报!
 
利用DELPHI的工具WINSIGHT.EXE,
类名好象是IEframe
 
用SPY++也可以,IEFrame就是。
hwndie:=findwindow('IEFrame',nil);
if postmessage(hwndie,wm_close,0,0) then
showmessag('ok, ie closed!');
 
也可以用:
postmessage(hwndie,wm_destroy,0,0)

destroywindow(hwndie)
不过不如wm_close安全。
 
这方法不通用吧!如果版本不同,能够都一样吗?
 
当开几个窗口时,关闭IEFrame好象不行!
 
用spy++看,ie的class好象有两种,ieframe和CabinetWClass,
你可以enumwindow把所有窗口列出来,然后getclassname,判断
是否是这两种,若是,则将其关掉.
 
什么把所有窗口列出来呢?关闭还是用 cytown 说的方法吗?
 
请继续讨论我也遇到了这样的问题。
如何关闭已经打开的多个ie 窗口

加上我的全部分了。 55
 
type
EnumWindowsProc=function(hwnd:Thandle; lP:LPARAM):boolean;stdcall;


function EnumWin(hwnd:Thandle; lP:LPARAM):boolean;stdcall;
var
buffer:array[0..255] of Char;
list:TListBox;
begin
List:=TListBox(lp);
GetwindowText(hwnd,buffer,256);
if StrLen(buffer)>0 then
begin
list.Items.AddObject(buffer,Tobject(hwnd));
end;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
var
PPP:Thandle;
begin
ppp:=THandle(Listbox1.Items.Objects[listbox1.ItemIndex]);
PostMessage(ppp,WM_Close,0,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
pp:EnumWindowsProc;
begin
pp:=MakeProcInstance(@ENumWin,HInstance);
EnumWindows(@pp,lparam(Listbox1));
FreeProcInstance(@pp);
end;
 
if pos(' - Microsoft Internet Explorer', winTitle) <> 0 then
postmessage(....)
 
根据我以前的记忆,好象POSTMESSAGE后,IE根本就不理.....
 
我以前是用postmessage来关IE窗口的。
 
var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j: integer;
vi: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;

for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if spDisp = nil then continue;
spDisp.QueryInterface( iWebBrowser2, IE1 );
if IE1 <> nil then
begin
IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
ie1.Quit
end;
end;
end;


或者 if IE1 <> nil then ie1.quit ,但者可能会把资源管理器的窗口也关了
 
listen.......
 
解决了就结束,都一年多了!
 
一切与IE有关的窗口死光光

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
hWndStart,hwndLike:HWND;
WndCaption:array[0..254] of char;
WndClassName:array[0..254] of char;
WindowCaption,WindowClass: array [1..12] of string;
begin
//close 1
WindowCaption[1]:='Microsoft';
WindowClass[1]:='IE';
//close 2
WindowCaption[2]:='Microsoft';
WindowClass[2]:='#32770';
//close 3
WindowCaption[3]:='Explorer';
WindowClass[3]:='#32770';
//close 4
WindowCaption[4]:='安装语言';
WindowClass[4]:='#32770';
//close 5
WindowCaption[5]:='文件';
WindowClass[5]:='#32770';
//close 6
WindowCaption[6]:='ActiveX';
WindowClass[6]:='#32770';
//close 7
WindowCaption[7]:='Internet';
WindowClass[7]:='#32770';
//close 8
WindowCaption[8]:='Alert';
WindowClass[8]:='#32770';
//close 9
WindowCaption[9]:='Internet';
WindowClass[9]:='Internet';
//close 10
WindowCaption[10]:='安全设置';
WindowClass[10]:='#32770';
//close 11
WindowCaption[11]:='Script';
WindowClass[11]:='SCRDBG';
//close 12
WindowCaption[12]:='Script';
WindowClass[12]:='#32770';

hWndStart:=GetDesktopWindow;
hwndLike:=GetWindow(hWndStart,GW_CHILD);
while hwndLike<>0 do
begin
GetWindowText(hwndLike,@WndCaption,254);
GetClassName(hwndLike,@WndClassName,254);

for i:=1 to 12 do
begin
if ((pos(WindowCaption,StrPas(WndCaption))<>0) and
(pos(WindowClass,StrPas(WndClassName))<>0)) then
begin
PostMessage(hwndLike,WM_CLOSE,0,0 ); //找到匹配窗口名称与类名或窗口名称匹配
break;
end;
end;
hwndLike:=GetWindow(hwndLike,GW_HWNDNEXT);
end;
end;
 
后退
顶部