Private Sub WebBrowser1_DownloadComplete() text1.Text = WebBrowser1.LocationURL End Sub
错了,这个只能打开webbrowser的
'一个捕获指定ie窗口的例子,改改就可以满足楼主的需求: Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private 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 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private 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 ’Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) 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 Const WM_SETTEXT = &HC Private Const WM_KEYDOWN = &H100 Private Const VK_RETURN = &HDPrivate Sub Command1_Click() Dim hWindow As Long Dim hWindowEx As Long hWindow = FindWindow(vbNullString, "CSDN.NET - 中国最大的开发者网络,为开发人员和相关企业提供全面的信息服务和技术服务 - Microsoft Internet Explorer") If hWindow Then hWindowEx = FindWindowEx(hWindow, ByVal 0&, vbNullString, vbNullString)
'下一行改为读取即可 SendMessage hWindowEx, WM_SETTEXT, 0, ByVal "www.baidu.com.cn" PostMessage hWindowEx, WM_KEYDOWN, VK_RETURN, 0 End If End Sub
在这一行: hWindowEx = FindWindowEx(hWindowEx, 0&, "Edit", vbNullString) 实际上已经取得了ie地址栏的句柄,下面给你一个根据句柄获取里面内容的函数: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long) Private Const WM_GETTEXTLENGTH = &HE Private Const WM_GETTEXT = &HDFunction GetText(ByVal hWndNow As Long) As String Dim hLength As Long
hLength = SendMessage(hWndNow, WM_GETTEXTLENGTH, 0, 0) If hLength > 0 Then ReDim bArr(hLength + 1) As Byte, bArr2(hLength - 1) As Byte Call RtlMoveMemory(bArr(0), hLength, 2) Call SendMessage(hWndNow, WM_GETTEXT, hLength + 1, bArr(0)) Call RtlMoveMemory(bArr2(0), bArr(0), hLength) GetText = StrConv(bArr2, vbUnicode) Else GetText = "" End If End Function
先谢谢 kissoflife! 你的方法非常好!
我在调试过程序中出现未定义函数:findwindows (即:hWindow = FindWindow(vbNullString, "CSDN.NET - 中国最大的开发者网络,为开发人员和相关企业提供全面的信息服务和技术服务 - Microsoft Internet Explorer")) 请问这个函数是系统函数还是自定义函数呢?
这就是声明了呀: Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 是不是这上面的声明你放到模块里面去了?那就应该改成Public了 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Dim dWinFolder As ShellLinkObject Dim dWinFolder As ShellWindows 'Dim ds As SHDocVw.InternetExplorerPrivate Sub Command1_Click() List1.Clear For i = o To dWinFolder.Count - 1 ' Debug.Print dWinFolder.Item(i).Type 'dWinFolder.Item(i).AddressBar = False List1.AddItem dWinFolder.Item(i).LocationURL Next i End SubPrivate Sub Form_Load() Set dWinFolder = New ShellWindows End SubPrivate Sub Form_Unload(Cancel As Integer) Set dWinFolder = Nothing End Sub上述程序可以列出打开的IE所有的网址
text1.Text = WebBrowser1.LocationURL
End Sub
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private 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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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
’Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) 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 Const WM_SETTEXT = &HC
Private Const WM_KEYDOWN = &H100
Private Const VK_RETURN = &HDPrivate Sub Command1_Click()
Dim hWindow As Long
Dim hWindowEx As Long hWindow = FindWindow(vbNullString, "CSDN.NET - 中国最大的开发者网络,为开发人员和相关企业提供全面的信息服务和技术服务 - Microsoft Internet Explorer")
If hWindow Then
hWindowEx = FindWindowEx(hWindow, ByVal 0&, vbNullString, vbNullString)
hWindowEx = FindWindowEx(hWindowEx, 0&, "ReBarWindow32", vbNullString)
hWindowEx = FindWindowEx(hWindowEx, 0&, "ComboBoxEx32", vbNullString)
hWindowEx = FindWindowEx(hWindowEx, 0&, "ComboBox", vbNullString)
hWindowEx = FindWindowEx(hWindowEx, 0&, "Edit", vbNullString)
'下一行改为读取即可
SendMessage hWindowEx, WM_SETTEXT, 0, ByVal "www.baidu.com.cn"
PostMessage hWindowEx, WM_KEYDOWN, VK_RETURN, 0
End If
End Sub
hWindowEx = FindWindowEx(hWindowEx, 0&, "Edit", vbNullString)
实际上已经取得了ie地址栏的句柄,下面给你一个根据句柄获取里面内容的函数:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_GETTEXT = &HDFunction GetText(ByVal hWndNow As Long) As String
Dim hLength As Long
hLength = SendMessage(hWndNow, WM_GETTEXTLENGTH, 0, 0)
If hLength > 0 Then
ReDim bArr(hLength + 1) As Byte, bArr2(hLength - 1) As Byte
Call RtlMoveMemory(bArr(0), hLength, 2)
Call SendMessage(hWndNow, WM_GETTEXT, hLength + 1, bArr(0))
Call RtlMoveMemory(bArr2(0), bArr(0), hLength)
GetText = StrConv(bArr2, vbUnicode)
Else
GetText = ""
End If
End Function
你的方法非常好!
我在调试过程序中出现未定义函数:findwindows
(即:hWindow = FindWindow(vbNullString, "CSDN.NET - 中国最大的开发者网络,为开发人员和相关企业提供全面的信息服务和技术服务 - Microsoft Internet Explorer")) 请问这个函数是系统函数还是自定义函数呢?
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
是不是这上面的声明你放到模块里面去了?那就应该改成Public了
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim dWinFolder As ShellWindows
'Dim ds As SHDocVw.InternetExplorerPrivate Sub Command1_Click()
List1.Clear
For i = o To dWinFolder.Count - 1
' Debug.Print dWinFolder.Item(i).Type
'dWinFolder.Item(i).AddressBar = False
List1.AddItem dWinFolder.Item(i).LocationURL
Next i
End SubPrivate Sub Form_Load()
Set dWinFolder = New ShellWindows
End SubPrivate Sub Form_Unload(Cancel As Integer)
Set dWinFolder = Nothing
End Sub上述程序可以列出打开的IE所有的网址
如何修改才能使其只列出当前IE的地址呢!