本人在用VB开发BHO,接口做了。部分功能也实现了。但是出现一个问题,
这个功能是:判断地址栏的地址是不是有效的。要是没效就跳到指定网站。
我的实现方法:ping网址,ping的通的就是有效网站。不通就跳到指定网站。
出现的问题:单一个插件的时候就没有问题。但是有别的插件时。
我软件的速度就没有别的插件快。所以就实现不了现在我是想到还没有实现的办法:在这里问大家。做好后本人将源码供出!
现在想到的办法是:利用hook判定在ie里输入的回车,只要能判定这个,就可以比别的快!或者那位有更高的办法。浏览者请帮忙顶贴!忽略了ping过程!Private WithEvents cPing As cPingImplements olelib.IObjectWithSite
Private WithEvents m_objIE As InternetExplorerPrivate Sub IObjectWithSite_GetSite(riid As UUID, ppvSite As IUnknown)
Dim objUnk As olelib.IUnknown '获得m_objIE IUnkown接口
Set objUnk = m_objIE '返回所需要的接口
objUnk.QueryInterface riid, ppvSite
End Sub
Private Sub IObjectWithSite_SetSite(ByVal pUnkSite As IUnknown) '获得IE接口
Set m_objIE = pUnkSite
End SubPrivate Sub m_objIE_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Dim tmp As String
Dim GoUrl As String
Dim IEpath As String
Dim str As String
Set cPing = New cPing
IEpath = URL
If URL = "about:blank" Then Exit Sub IEpath = Mid(IEpath, 8, Len(IEpath))
If InStr(IEpath, "/") <> 0 Then
IEpath = Mid(IEpath, 1, InStr(IEpath, "/") - 1)
End If
Debug.Print IEpath str = cPing.funcGetIPFromHostName(IEpath)
If str = "" Then
Debug.Print "主机名不能被解释"
m_objIE.Stop
tmp = IEpath
GoUrl = "http://www.baidu.com/s?tn=270431700_pg&wd=" + tmp
m_objIE.Navigate2 GoUrl
Exit Sub
Else
Debug.Print str
End If
Set cPing = Nothing
End Sub本人网站[恶魔界也有很多好源码]
这个功能是:判断地址栏的地址是不是有效的。要是没效就跳到指定网站。
我的实现方法:ping网址,ping的通的就是有效网站。不通就跳到指定网站。
出现的问题:单一个插件的时候就没有问题。但是有别的插件时。
我软件的速度就没有别的插件快。所以就实现不了现在我是想到还没有实现的办法:在这里问大家。做好后本人将源码供出!
现在想到的办法是:利用hook判定在ie里输入的回车,只要能判定这个,就可以比别的快!或者那位有更高的办法。浏览者请帮忙顶贴!忽略了ping过程!Private WithEvents cPing As cPingImplements olelib.IObjectWithSite
Private WithEvents m_objIE As InternetExplorerPrivate Sub IObjectWithSite_GetSite(riid As UUID, ppvSite As IUnknown)
Dim objUnk As olelib.IUnknown '获得m_objIE IUnkown接口
Set objUnk = m_objIE '返回所需要的接口
objUnk.QueryInterface riid, ppvSite
End Sub
Private Sub IObjectWithSite_SetSite(ByVal pUnkSite As IUnknown) '获得IE接口
Set m_objIE = pUnkSite
End SubPrivate Sub m_objIE_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Dim tmp As String
Dim GoUrl As String
Dim IEpath As String
Dim str As String
Set cPing = New cPing
IEpath = URL
If URL = "about:blank" Then Exit Sub IEpath = Mid(IEpath, 8, Len(IEpath))
If InStr(IEpath, "/") <> 0 Then
IEpath = Mid(IEpath, 1, InStr(IEpath, "/") - 1)
End If
Debug.Print IEpath str = cPing.funcGetIPFromHostName(IEpath)
If str = "" Then
Debug.Print "主机名不能被解释"
m_objIE.Stop
tmp = IEpath
GoUrl = "http://www.baidu.com/s?tn=270431700_pg&wd=" + tmp
m_objIE.Navigate2 GoUrl
Exit Sub
Else
Debug.Print str
End If
Set cPing = Nothing
End Sub本人网站[恶魔界也有很多好源码]
是那种监视浏览器将访问的地址是否有效的程序吗?如果目标地址无效就自动转向的BHO插件?你所说的“别的插件”是什么插件?具体的是什么?因为很多程序只能做到相对的,不会有绝对的事。你所说的“ping的通的就是有效网站”会不会太偏激?
据我所知,能不能Ping通一个地址并不能判断那个地址的网站是否有效。
就我弄过的几台服务器我都拦截了ICMP,所以Ping是Ping不通的,但网页是正常的。
如果是判断网页,最好直接使用HTTP协议要个头来看看就能判断了。
能给个例子么。。万分感谢····
本人网站[恶魔界也有很多好源码]
通过窗口句柄枚举出所有的子窗口句柄可以用API函数GetWindow来实现,然后通过
GetClassName和GetWindowText取得子窗口的类名或标题来判断是不是你要处理的对
象,当确定某个子窗口句柄后就可以开始HOOK了。
HOOK相关的函数有
GetWindowLong
SetWindowLong
CallWindowProc
关键字:
GWL_WNDPROC
GWL_USERDATAWM_KEYDOWN
WM_KEYUP