Getting current browser URL with VB.NET
Introduction
This article explains how you can get the current URL from your browser with VB.NET. The demo program demonstrates this for Windows Internet Explorer and Google Chrome.
Background
For one of my VB.NET programs I wanted to get the current browser URL; of course I can copy and paste it, but if the program can get it for me, all the better. So I searched the internet and found numerous "solutions" but they were all either written in C or did not work (at least not for me). After reading various forums I decided to adapt one of these solutions and managed to get the URL from Internet Explorer and from Chrome; attempts to get the URL from Firefox were unsuccessful.
My development configuration is: Microsoft Visual Basic 2008 Express, Windows7 Home Premium 64 bits, IE9, Chrome 11.0.696.68, Firefox 4. The code has also been tested on Vista 32 bits. The basic ideas and forum suggestions are referenced in the code.
The code is in the CurrentUrl.vb module, which you can add to your project. In your code you should first verify that the browser (IE or Chrome) is available.For example:
... Dim appName As String = "iexplore" Dim proc As System.Diagnostics.Process = GetBrowser(appName) ... Private Function GetBrowser(ByVal appName) As System.Diagnostics.Process Dim pList() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessesByName(appName) For Each proc As System.Diagnostics.Process In pList If proc.ProcessName = appName Then Return proc End If Next Return Nothing End Function ...
If the browser process is returned, call the GetCurrentUrl
function in CurrentUrl.vb with these parameters:
- The browser window handle: proc.MainWindowHandle
- The browser name: "Windows Internet Explorer" or "Google Chrome"
- The classname of the window to loook for: "Edit" for IE, "Chrome_AutocompleteEditView" for Chrome
- (Optional) A combobox to get a "treeview" of the browser windows up to the target window; pass
Nothing
if you don't want this
... If proc IsNot Nothing Then Dim browserName as string = "Windows Internet Explorer" Dim className as String = "Edit" Dim s As String = GetCurrentUrl(proc.MainWindowHandle, browserName, className, ComboBox1) If s <> "" Then TextBox1.Text = s ComboBox1.SelectedIndex = 0 'Window list Else Label1.Text = "Current URL is not available" End If Else Label1.Text = browserName & " is not available" end If ...
Inside CurrentUrl.vb
This module contains a simple overview, references to the sources on which it is based, and definitions of the required Windows functions and constants, as well as some private variables.
GetCurrentUrl
is the only public function; it calls the private EnumWindows
function to get window handles until it finds the browser window and then look for the child window with the URL. The URL string is returned to your program.
Points of Interest
In the referenced sources, the search for the target window starts from the top window (Intptr.Zero) and it returns a list of URLs. My approach starts from the browser window (proc.MainWindowHandle); I used GetBrowser
and debugged CurrentUrl until I found the target window with the appropriate classname to get only one URL. Unfortunately, this does not work for Firefox, which requires a completely different approach to get window handles (see Firefox Access).
History
May 2011 - First release
发表评论
ynOXbC You can definitely see your skills in the work you write. The world hopes for even more passionate writers like you who are not afraid to say how they believe. Always go after your heart.
7nXcL0 Thanks so much for the post.Thanks Again. Great.
rxjy81 Im obliged for the article.Really thank you! Keep writing.
FStmC9 I truly appreciate this article post.Really looking forward to read more. Want more.
qsJsMV I really enjoy the post.Really thank you! Cool.
RLruls Enjoyed every bit of your article post.Thanks Again. Much obliged.