检测该超链接是否存在'添加 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
搞错了,刚才的方法是识别那种 *.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
'本例是查找运行中的网页以 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
看了一下代码,是在找IE窗体中的,含CSDN关键字的窗体名,但这好像
和LZ的意思不大一样吧???
还有找的不是很准确,,如果同时出现了三个以上含CSDN关键字的IE窗体
那么你的程序会有些问题,测试过了吗?
Content-Disposition = attachment; filename=文件名.rar
你可以判断这一行,识别是否是文件就好了。
其实判断 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
Print GetCaptionFromHwnd(allhwnd)