我是想用vb实现像傲游2.0检测连接一样实现批量检测超链接?
如果能分别检测该超链接是否存在,或者超链接是否能下载,有的网页是不存在但是会跳转到主页(像这样的链接比较难检测),一般的不存在就判断是404的错误,存在的是200,但是这种方法好像不太好。

解决方案 »

  1.   

    检测该超链接是否存在'添加 Command1
    '本例是查找运行中的网页以 CSDN 为链接关键词,有找到即表示链接成功, 自己修改关键词Option Explicit
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
    Const MAXLEN = 255
    Const GW_HWNDNEXT = &H2
    Dim hw&, allhwnd&, SchWeb$, aa$
    Private Sub Command1_Click()
       SchWeb = "CSDN"
       hw = FindWindow("IEFrame", vbNullString) '以类名查找Hwnd
       If hw <> 0 Then Call Showall
    End SubSub Showall()
       allhwnd = FindWindow("IEFrame", vbNullString)
       If Getclassnm(allhwnd) = "IEFrame" Then
          If InStr(UCase(GetCaptionFromHwnd(allhwnd)), SchWeb) > 0 Then
             MsgBox "链接存在" & vbCrLf & Chr(10) & GetCaptionFromHwnd(allhwnd)
             Exit Sub
          End If
          Do Until allhwnd = 0
             DoEvents
             allhwnd = GetWindow(allhwnd, GW_HWNDNEXT) '开始找下一个窗体句柄
             If Getclassnm(allhwnd) = "IEFrame" Then
                If InStr(UCase(GetCaptionFromHwnd(allhwnd)), SchWeb) > 0 Then
                   MsgBox "链接存在" & vbCrLf & Chr(10) & GetCaptionFromHwnd(allhwnd)
                   Exit Sub
                End If
             End If
          Loop
       Else
          MsgBox "没有发现查找的链接在运行"
       End If
    End SubPrivate Function GetCaptionFromHwnd(hwnd As Long) As String
       Dim strBuffer$, intCount%
       strBuffer = String$(MAXLEN - 1, 0)
       intCount = GetWindowText(hwnd, strBuffer, MAXLEN)
       If intCount > 0 Then GetCaptionFromHwnd = Left$(strBuffer, intCount)
    End FunctionFunction Getclassnm(WinWnd As Long) As String
       Dim Ret$, RetVal&, lpClassName$
       lpClassName = Space(256)
       RetVal = GetClassName(WinWnd, lpClassName, 256)
       Getclassnm = Left(lpClassName, RetVal)
    End Function
      

  2.   

    我刚才测试了一下,好像不大准确???
    看了一下代码,是在找IE窗体中的,含CSDN关键字的窗体名,但这好像
    和LZ的意思不大一样吧???
    还有找的不是很准确,,如果同时出现了三个以上含CSDN关键字的IE窗体
    那么你的程序会有些问题,测试过了吗?
      

  3.   

    比如:如果是下载文件,并且成功,通常http头里会有这么一段
    Content-Disposition = attachment; filename=文件名.rar
    你可以判断这一行,识别是否是文件就好了。
      

  4.   

    搞错了,刚才的方法是识别那种 *.asp?参数  下载的文件
    其实判断 Content-Type: 就OK了
    通常参数是 TEXT/HTML 都是网页代码,只要不是 TEXT/HTML 多半就是下载的文件。
    下面我搞了个简单的函数实现此功能:
    Private Function IsHearOK(URL As String) As Boolean
       Dim XMLObject As Object, ReturnType As String
       Set XMLObject = CreateObject("Microsoft.XMLHTTP")
       XMLObject.open "GET", URL, False
       XMLObject.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
       XMLObject.setRequestHeader "Range", "bytes=1-255"
       XMLObject.Send
       If XMLObject.Status = 200 Or XMLObject.Status = 206 Then
          ReturnType = XMLObject.getResponseHeader("CONTENT-TYPE")
          If UCase(ReturnType) <> "TEXT/HTML" Then
             IsHearOK = True
          Else
             IsHearOK = False
          End If
       Else
          IsHearOK = False
       End If
    End Function
      

  5.   

    如果能分别检测该超链接是否存在 ? 这句话的关键词 我已强调 "自己修改", 越长的关键词越准确不是吗? CSDN只不过是一个举例罢了.回6F 和LZ的意思不大一样吧??? 上面能找到不就表示该链接成功吗 ? 怎会与LZ意思不同呢 ?本人贴代码除非在网吧, 否则任何代码 100% 我自己会先在VB6窗体下运行测试的.如果你要枚举所有网页则将 Exit Sub 去掉, 然后在For...Next里面加上
    Print GetCaptionFromHwnd(allhwnd) 
      

  6.   

    cmb666老师有vb的地方都在,呵呵