Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As String) As Long Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_GETTEXT = &HD Public Const WM_GETTEXTLENGTH = &HE Public Const WM_CLOSE = &H10Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPublic Const WM_SETTEXT = &HCPublic Function GetText(ByVal hNow As Long) As String On Error Resume Next Dim bArr() As Byte, bArr2() As Byte hLength = SendMessage(hNow, WM_GETTEXTLENGTH, 0, 0) If hLength > 0 Then ReDim bArr(hLength + 1) As Byte, bArr2(hLength - 1) As Byte Call CopyMemory(bArr(0), hLength, 2) Call SendMessage(hNow, WM_GETTEXT, hLength + 1, bArr(0)) Call CopyMemory(bArr2(0), bArr(0), hLength) GetText = StrConv(bArr2, vbUnicode) Else GetText = "" End If End Function'----------------- sClassName = ("IEFrame") lhwnd = FindWindowEx(0, 0, sClassName, vbNullString) wwe=lhwnd If lhwnd = 0 Then sClassName = ("Afx") lhwnd = FindWindowEx(0, 0, sClassName, vbNullString) sClassName = ("WorkerA") lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) sClassName = ("ReBarWindow32") lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) sClassName = ("ComboBox") lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) EnableWindow lhwnd, False sClassName = ("Edit") lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) WindowHandle = lhwnd buffer = GetText(WindowHandle) If buffer = "" Then Exit Sub for i=0 to List1.Listconst '假设被限制的网址在List1中 If buffer=list1.list(i) Then ttt = "该资源禁止访问!" SendMessageByString WindowHandle, WM_SETTEXT, -1, ByVal ttt MessageBox wwe, ttt, ttt, vbOKOnly + vbInformation PostMessage wwe,WM_CLOSE ,0,0End if
上面的 '----------------- sClassName = ("IEFrame") lhwnd = FindWindowEx(0, 0, sClassName, vbNullString) wwe=lhwnd If lhwnd = 0 Then 的 If lhwnd = 0 Then 一行不要Windows Me/98的工作区为Classid=WorkerA;Windows2000的是WorkerW
用getwindowtext的功能也不是很好啊。要是窗体的标题没有我要禁止的,
那不是没用了?
护花的作者写的那篇文章,那边有的找呢?to lou_df(ldf)
你能不能说详细点呢?
我看得很不明白啊。。
谢谢你们了。
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As String) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_CLOSE = &H10Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPublic Const WM_SETTEXT = &HCPublic Function GetText(ByVal hNow As Long) As String
On Error Resume Next
Dim bArr() As Byte, bArr2() As Byte
hLength = SendMessage(hNow, WM_GETTEXTLENGTH, 0, 0)
If hLength > 0 Then
ReDim bArr(hLength + 1) As Byte, bArr2(hLength - 1) As Byte
Call CopyMemory(bArr(0), hLength, 2)
Call SendMessage(hNow, WM_GETTEXT, hLength + 1, bArr(0))
Call CopyMemory(bArr2(0), bArr(0), hLength)
GetText = StrConv(bArr2, vbUnicode)
Else
GetText = ""
End If
End Function'-----------------
sClassName = ("IEFrame")
lhwnd = FindWindowEx(0, 0, sClassName, vbNullString)
wwe=lhwnd
If lhwnd = 0 Then
sClassName = ("Afx")
lhwnd = FindWindowEx(0, 0, sClassName, vbNullString)
sClassName = ("WorkerA")
lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
sClassName = ("ReBarWindow32")
lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
sClassName = ("ComboBox")
lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
EnableWindow lhwnd, False
sClassName = ("Edit")
lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString)
WindowHandle = lhwnd
buffer = GetText(WindowHandle)
If buffer = "" Then Exit Sub
for i=0 to List1.Listconst '假设被限制的网址在List1中
If buffer=list1.list(i) Then
ttt = "该资源禁止访问!"
SendMessageByString WindowHandle, WM_SETTEXT, -1, ByVal ttt
MessageBox wwe, ttt, ttt, vbOKOnly + vbInformation
PostMessage wwe,WM_CLOSE ,0,0End if
'-----------------
sClassName = ("IEFrame")
lhwnd = FindWindowEx(0, 0, sClassName, vbNullString)
wwe=lhwnd
If lhwnd = 0 Then
的 If lhwnd = 0 Then 一行不要Windows Me/98的工作区为Classid=WorkerA;Windows2000的是WorkerW
http://www.csdn.net/develop/read_article.asp?id=6351
利用IE扩展实现的IE控制,护花使者使用的基本上就是这种功能。
谢谢。我现在正在看
to jlum99(闲人) (,,,,
你是不是有更好的方法啊?
你用的方法是不是结合类名通过查找窗体的标题,
对应呢?
如果该窗体的标题是被禁止的网站的字符串,就不允许,
是这样吗?
那要是那个网站不是使用这些字符串呢?
能不能通过url和ip来禁止呢?
怎么获取地址栏的url?
http://www.taihe.com
如果是想取得地址栏的句柄,那不是要针对特定的浏览器了吗?
那样适用范围不是 很小吗?
怎么才能做得更通用一些的!!!!!!???