你可以先取得浏览器的句柄,然后得到其中地址栏的句柄,再然后就可以得到地址栏里面的内容,不但IE,而且其他常见的浏览器一并解决掉了。关键代码就给你了吧。
不过这是不是根本方法,根本方法还是截包。
其中的filter是个函数,就是将所得的地址信息与你指定的信息进行比较;form1.newurl.Text就是你指定要转向的地址内容,发个消息过去模拟地址填入然后回车的动作就可以了
function EnumChildProc(hwnd:HWND;IParam:LPARAM):bool;stdcall;
var
buf:array[0..250] of char;
rsize:integer;
begin
result:=true;
Getclassname(hwnd,buf,sizeof(buf)); //取窗口类名
if (strpas(buf)='Edit') then
begin
rsize:=sendmessage(hwnd,WM_GETTEXT,sizeof(buf),integer(@buf));
if rsize>0 then
if strpas(buf)<>form1.newurl.Text then
if filter(buf) then
begin
sendmessage(hwnd,WM_SETTEXT,0,integer(form1.newurl.Text)); //设置地址栏字符串
postmessage(hwnd,WM_KEYDOWN,$D,$1c0001);
postmessage(hwnd,WM_KEYUP,$d,$c01c0001);
MessageDlg('您所浏览的内容已被管理员限制!',mtError,[mbOK],0); //提示警告信息
end;
result:=false;
end;
end;
var
fwnd:thandle;
buf2,buf:array[0..250] of char; //取类名的缓冲
begin
fwnd:=GetForegroundWindow;
Getclassname(fwnd,buf,sizeof(buf));
Getwindowtext(fwnd,buf2,sizeof(buf2));
if Dlg_forbid then
if strpas(buf)='#32770' then
SendMessage(fwnd,WM_CLOSE,0,0);
if (strpas(buf)='CabinetWClass') or (strpas(buf)='ExploreWClass') or (strpas(buf)='IEFrame') or (pos('Netscape',strpas(buf2))>0) or (pos('Opera',strpas(buf2))>0) or (pos('Tencent',strpas(buf2))>0) then
EnumChildWindows(fwnd,@enumchildproc,0);
end;