How can I get the current browser URL with an AutoHotKey script?
I'm looking for a way in AutoHotkey to put the currently visited url in a variable.
The goal of this AHK is to trace what I've been doing during the day to log my hours better. I have another system which I use to clock my work, but sometimes I forget to use it when I get side-tracked.
loop
{
; Get current Window ID & Name
WinGet, active_id, ID, A
WinGet, process_name, ProcessName, A
; Only 开发者_StackOverflow中文版do anything if any other windows was activated
if(active_id = PrevActiveId)
{
; Do nothing
}
else
{
; Format the time-stamp.
current=%A_DD%/%A_MM%/%A_YYYY%, %A_Hour%:%A_Min%
; Write this data to the log.txt file.
fileappend, %current% - %process_name%`n, log.txt
; Get the URL if process_name = "chrome.exe"
if(process_name = "chrome.exe")
{
; Put URL in log file
; fileappend, %current% - %current_url%`n, log.txt
}
}
PrevActiveId = %active_id%
Sleep, 100
}
All browsers that I've used support Alt+D to focus and select the url. Here are my AHK scripts that duplicates the current tab in Google Chrome, Firefox, and Internet Explorer by pressing Ctrl+Shift+D..
#IfWinActive ahk_class MozillaUIWindowClass ; Mozilla Firefox 3.x
^+d::GenericDuplicateTab() ; (Control+Shift+D)
#IfWinActive
#IfWinActive ahk_class MozillaWindowClass ; Firefox 4, 5, 6, 7, 8+ (?)
^+d::GenericDuplicateTab() ; (Control+Shift+D)
#IfWinActive
#IfWinActive ahk_class Chrome_WidgetWin_1 ; Chromium and Chrome 19+
^+d::GenericDuplicateTab() ; (Control+Shift+D)
#IfWinActive
#IfWinActive ahk_class Chrome_WidgetWin_1 ; Chrome 18 and less
^+d::GenericDuplicateTab() ; (Control+Shift+D)
#IfWinActive
#IfWinActive ahk_class IEFrame
^+d::InternetExplorerDuplicateTab() ; (Control+Shift+D)
#IfWinActive
GenericDuplicateTab()
{
; Wait for both Control and Shift to be released.
KeyWait Control
KeyWait Shift
BackupClipbrd := Clipboard
Sleep 50
Send !d ; Select the url textbox
Sleep 150
Send ^x ; Copy the url
ClipWait 0.1
If ERRORLEVEL
{
Clipboard := BackupClipbrd
Return
}
Send ^t ; Open a new tab
Sleep 50
Send ^v ; Paste the url into the new tab's url textbox
Sleep 50
Send {Enter}
Clipboard := BackupClipbrd
}
InternetExplorerDuplicateTab()
{
; Wait for both Control and Shift to be released.
KeyWait Control
KeyWait Shift
Send ^k ; Call IE's shortcut to duplicate tab (Control+K)
Sleep 100
Send ^{TAB} ; Switch to that tab
}
For Chrome, get the text of the control Chrome_OmniboxView1, which is the omnibox (as for the current version of Chrome, 21.0.1180.83).
This code puts the content of the omnibox into the variable omniboxContents:
ControlGetText omniboxContents, Chrome_OmniboxView1, Chrome
Note that omniboxContents doesn't necessarily contain a correct URL, because "http://" is left out if the URL starts with "http://". So instead of "http://www.google.com" you will get "www.google.com", which strictly speaking isn't a correct URL. This is simply because Chrome shows the address that way in the Omnibox. You will have add extra code to get a correct URL from the contents of the omnibox.
Or you can use F6.
Most of the browsers get to address bar and select entire URL for you when press F6.
Then its just matter of copy-paste.
For newer Firefox versions, its Ctrl+L though.
For this, you can check window title.
A clean way to do this:
GroupAdd, WebBrowsers, ahk_class MozillaWindowClass
GroupAdd, WebBrowsers, ahk_class IEFrame
GroupAdd, WebBrowsers, ahk_class Chrome_WidgetWin_0
GroupAdd, WebBrowsers, ahk_class Chrome_WidgetWin_1
GroupAdd, WebBrowsers, ahk_class OperaWindowClass
GroupAdd, WebBrowsers, ahk_class {1C03B488-D53B-4a81-97F8-754559640193}
; etc.
#IfWinActive, ahk_group WebBrowsers
{
^+d::
; [Instructions...]
return
}#If
It is also possible to do it without relying on the clipboard, by directly inspecting the actual components which make up the browser window. More info: http://www.autohotkey.com/board/topic/111114-get-the-url-of-the-current-active-browser-tab/. This method much more effective, but relies on using OS APIs.
You can use the Alt+D shortcut to activate address bar and then copy the url using Ctrl+C shortcut
F1::
{
Send, !d
Sleep 50
Send, ^c
Sleep 50
Return
}
精彩评论