Tôi đang làm việc với đối tượng Internet Explorer trong Visual Basic. Có cách nào để sao chép URL hiện tại mà IE đang hiển thị để tôi có thể dán nó ở nơi khác bằng khay nhớ tạm của tôi không?Nhận URL hiện tại trong IE Sử dụng Visual Basic
Trả lời
Giả sử bạn đã có cửa sổ IE xác định, mà tự nó là một chút phức tạp hơn - tôi có thể xây dựng trên này nếu cần thiết:
Dim ieIEWindow As SHDocVw.InternetExplorer
Dim sIEURL As String
'Set your IE Window
sIEURL = ieIEWindow.LocationURL
Để có được cửa sổ IE, bạn sẽ cần phải tham khảo thư viện Microsoft Internet Controls
(ieframe.dll
) trong trình chỉnh sửa VBA bằng cách truy cập Tools
=>References...
và chọn từ danh sách. Nếu mục đó không có sẵn, tệp .dll cho tôi nằm ở C:\Windows\System32\ieframe.dll
.
Khi tham chiếu được đặt, bạn sẽ có quyền truy cập vào thư viện được gọi là SHDocVw
trong mã của bạn.
Bạn có thể lấy các cửa sổ IE (giả sử chỉ có một mở) bằng cách sử dụng sau đây (chưa được kiểm tra, điều chỉnh/giảm từ mã làm việc của riêng tôi):
Public Function GrabIEWindow() As SHDocView.InternetExplorer
Dim swShellWindows As New SHDocVw.ShellWindows
Dim ieOpenIEWindow As SHDocVw.InternetExplorer
Set GrabIEWindow = Nothing
' Look at the URLs of any active Explorer windows
' (this includes WINDOWS windows, not just IE)
For Each ieOpenIEWindow In objShellWindows
' Check the I.E. window to see if it's pointed
' to a web location (http)
If Left$(ieOpenIEWindow.LocationURL, 4) = "http" Then
' If so, set this window as the one to use.
' This will need to be modified to create
' a list if you want to select from more
' than one open window
' Optional grab the HWND for later reference...
Dim lWindowID As Long
lWindowID = ieOpenIEWindow.HWND
Set GrabIEWindow = ieOpenIEWindow
Exit Function
End If
Next OpenIEWindow
End Function
Trên đây cũng có thể được sửa đổi để cho phép một sự lựa chọn của nhiều cửa sổ IE đang mở.
+ 1 Yup Nếu chỉ có một cửa sổ mở hoặc nếu Cửa sổ IE được xác định. –
@SiddharthRout Tôi sử dụng loại tự động này hàng ngày và đã phát triển một số công cụ bẩn nhưng hiệu quả để hoàn thành việc này. (biểu mẫu liệt kê tất cả các cửa sổ có sẵn, lựa chọn người dùng, phiên sau đó liên kết với HWND, trong một số trường hợp đảm bảo cửa sổ vẫn mở, vv) – Gaffi
Kool :) Bạn có thể muốn sửa đổi bài đăng của mình và thêm người dùng cần thêm tham chiếu đến Microsoft Internet Controls? –
Chết tiệt! Điều này nhắc tôi về vb6 ngày của tôi :)
Ok đây là những gì tôi có. Nếu có nhiều hơn 1 cửa sổ IE thì cửa sổ IE sẽ hoạt động lần cuối (hiện tại) nếu chỉ có một cửa sổ thì sẽ mất.
'~~> Set a reference to Microsoft Internet Controls
'~~> The GetWindow function retrieves the handle of a window that has
'~~> the specified relationship (Z order or owner) to the specified window.
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
'~~> The GetForegroundWindow function returns the handle of the foreground
'~~> window (the window with which the user is currently working).
Private Declare Function GetForegroundWindow Lib "user32"() As Long
Sub GetURL()
Dim sw As SHDocVw.ShellWindows
Dim objIE As SHDocVw.InternetExplorer
Dim topHwnd As Long, nextHwnd As Long
Dim sURL As String, hwnds As String
Set sw = New SHDocVw.ShellWindows
'~~> Check the number of IE Windows Opened
'~~> If more than 1
hwnds = "|"
If sw.Count > 1 Then
'~~> Create a string of hwnds of all IE windows
For Each objIE In sw
hwnds = hwnds & objIE.hwnd & "|"
Next
'~~> Get handle of handle of the foreground window
nextHwnd = GetForegroundWindow
'~~> Check for the 1st IE window after foreground window
Do While nextHwnd > 0
nextHwnd = GetWindow(nextHwnd, 2&)
If InStr(hwnds, "|" & nextHwnd & "|") > 0 Then
topHwnd = nextHwnd
Exit Do
End If
Loop
'~~> Get the URL from the relevant IE window
For Each objIE In sw
If objIE.hwnd = topHwnd Then
sURL = objIE.LocationURL
Exit For
End If
Next
'~~> If only 1 was found
Else
For Each objIE In sw
sURL = objIE.LocationURL
Next
End If
Debug.Print sURL
Set sw = Nothing: Set objIE = Nothing
End Sub
LƯU Ý: Tôi đã không thực hiện bất kỳ xử lý lỗi. Tôi chắc chắn bạn có thể chăm sóc điều đó;)
Điều này khá khác so với phương pháp của tôi! Tôi sử dụng một số tham chiếu dll bên ngoài, nhưng chỉ để thao tác các trang (tức là nhảy qua lại giữa nhiều trang). Làm cách nào để bạn xử lý 'sw.Count = 1' khi cửa sổ duy nhất có đường dẫn không phải http, vì cửa sổ có thể là khung Windows chuẩn (tức là 'Máy tính của tôi')? – Gaffi
Giống như tôi đã đề cập, tôi chưa bao gồm bất kỳ xử lý lỗi nào. sử dụng 'Left $ (ieOpenIEWindow.LocationURL, 4) = "http" 'giống như bạn đã làm sẽ là bước tiếp theo của tôi nhưng tôi đã thử nghiệm với 3 cửa sổ IE hợp lệ với địa chỉ thực. :) Cung cấp cho nó một thử với nhiều hơn 1 cửa sổ IE và xem những gì bạn nhận được URL? –
- 1. Nhận URL hiện tại trong Chrome, Firefox và IE bằng cách sử dụng C# cho hwnd
- 2. Cách sử dụng mutex trong Visual Basic
- 3. Nhận URL hiện tại bằng cách sử dụng Jquery
- 4. FreeMarker - Nhận URL hiện tại
- 5. Nhận URL hiện tại trong Python
- 6. visual basic và vb.net
- 7. Tôi cần thực hiện dòng lệnh trong Visual Basic Script
- 8. DIM là gì đứng trong Visual Basic và BASIC?
- 9. Kích thước màn hình trong Visual Basic
- 10. Kích thước mảng trong Visual Basic?
- 11. Làm tròn số xuống trong Visual Basic
- 12. Visual Basic 6.0 Case Statement
- 13. Loại dữ liệu thập phân trong Visual Basic 6.0
- 14. Nhận kết nối TFS hiện tại trong Visual Studio addin
- 15. Cách nhận URL trang hiện tại trong chế độ xem?
- 16. Hàm băm Visual Basic 6.0
- 17. Nhận url của đường dẫn hiện tại trong Terminal SSH
- 18. Giá trị hex trong Visual Basic
- 19. "@Model", "@Viewbag" và "@Url" "không tồn tại trong ngữ cảnh hiện tại" Razor MVC3 khi sử dụng Visual Studio 11 Beta/Visual Studio 2012 RC
- 20. 'Friend WithEvent' trong Visual Basic so với 'private' trong C#
- 21. Dễ dàng hơn Visual Basic 6?
- 22. Visual Basic: tự động tạo đối tượng bằng cách sử dụng một chuỗi như tên
- 23. Công cụ tạo mẫu Twig: nhận url hiện tại
- 24. BASIC sử dụng hệ thống gõ nào?
- 25. phân trang wordpress nhận số trang hiện tại từ url
- 26. Nhận URL trình duyệt hiện tại - ActionScript 3
- 27. Tham chiếu truyền đối tượng trong Visual Basic (VBA)
- 28. Cách tốt nhất để sử dụng các lớp .NET từ Visual Basic 6 là gì?
- 29. WIX 3: Sử dụng HEAT cho Visual Basic 6 COM Dlls
- 30. Phát hiện IE bằng cách sử dụng jQuery
điều này có thể phức tạp hơn một chút so với bạn muốn, và đó là VB.NET, nhưng nó phải được dịch. Hy vọng nó sẽ giúp [Nhận URL] (http://www.codeproject.com/Articles/204929/Getting-current-browser-URL-with-VB-NET) –
Ứng dụng nào? Excel, Access ..? – Fionnuala
Bạn đã kết nối với IE hiện tại như thế nào? Điều này là quan trọng như những gì nếu có nhiều hơn 1 cửa sổ IE mở. Bạn có ràng buộc với IE dựa trên chú thích không? Hiển thị cho chúng tôi nhiều mã hơn sẽ thực sự hữu ích. Nếu bạn muốn mã nhận URL từ tất cả các cửa sổ IE thì bạn có thể đặt tham chiếu đến Microsoft Internet Controls và sau đó bạn có thể lặp qua tất cả các cửa sổ IE bằng cách sử dụng 'ShellWindows'. Khi bạn nhận được cửa sổ, chỉ cần sử dụng '.LocationURL' để nhận địa chỉ. –