怎样知道 IE 是否已经启动(100分)

  • 主题发起人 主题发起人 hadyq
  • 开始时间 开始时间
H

hadyq

Unregistered / Unconfirmed
GUEST, unregistred user!
最好是第一个IE窗口一打开,就可以发一个消息给我的一个已经运行的程序。
而最后一个IE窗口全部关闭时也发一个消息,请各位大吓指教。
 
你可以把微软买下来,然后,改这段程序来实现你的要求。。:)
 
hwndie:=findwindow('IEFrame',nil);
 
同意thtfdyh的话,但你可以用笨一点的方法,例如做一个系统钩子(HOOK),
或者用更笨一点的方法,不停的等待,然后判断大梨树先生的标志位。

repeat
Application.ProcessMessages;
hwndie:=findwindow('IEFrame',nil);
until hwndie <> 0
你还可以用WinSight跟踪IE 的启动过程,看看他向什么地方乱发送消息
(微软常干这样的事),然后截获它!
 
//hook例子

unit Main_Form_Unit;

interface

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

type
TMainForm = class(TForm)
ListBox1: TListBox;
Panel1: TPanel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure StaticText1Click(Sender: TObject);
private
function ExtractHwnd (const Text: string): THandle;
function ExtractTitle (const Text: string): string;
procedure UpdateEdit;
procedure CallEnumWindows;
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

uses ShellAPI;

function GetTitle(Hwnd: THandle; Param: Pointer): Boolean; stdcall;
var
TitleStr: string;
begin
SetLength (TitleStr, 300);
GetWindowText (Hwnd, PChar (TitleStr), 300);
MainForm.ListBox1.Items.Add (
IntToStr (Hwnd) + ': ' + TitleStr);
Result := True;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
CallEnumWindows;
ListBox1.ItemIndex := 0;
UpdateEdit;
Button2.Enabled := True;
end;

function TMainForm.ExtractHwnd(const Text: string): THandle;
begin
Result := StrToInt (
Copy (Text, 1, Pos (':', Text) - 1));
end;

function TMainForm.ExtractTitle(const Text: string): string;
begin
Result := Copy (Text, Pos (':', Text) + 2, Length (Text));
end;

procedure TMainForm.ListBox1Click(Sender: TObject);
begin
UpdateEdit;
end;

procedure TMainForm.Button2Click(Sender: TObject);
var
OldItemIndex : Integer;
begin
SetWindowText (
ExtractHwnd (ListBox1.Items [ListBox1.ItemIndex]),
PChar (Edit1.Text));
OldItemIndex := ListBox1.ItemIndex;
CallEnumWindows;
ListBox1.ItemIndex := OldItemIndex;
UpdateEdit;
end;

procedure TMainForm.UpdateEdit;
begin
Edit1.Text := ExtractTitle (ListBox1.Items [ListBox1.ItemIndex]);
end;

procedure TMainForm.CallEnumWindows;
begin
ListBox1.Clear;
EnumWindows (@GetTitle, 0);
end;

end.
 
这时有一个问题,当IE是自动控制等一些非正规情况所建立的时候,其类名并不叫IEFrame。
所以建立,还是建议先找到IE应用程序的路径然后对IE的可搪行文件执行一个写操作,然后
再将数据写回来,如果能写的那么则表示IE没有运行。否则相反。
 
可怜啊,快给我个答案吧
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部