1

Тема: AHK: посещаемые URL

Возможно ли с помощью AHK отслеживать посещаемые URL и при совпадении с URL из списка производить какое-либо действие?
Если возможно насколько это сложно и в какую сторону копать?

Заранее спасибо за ответы.

2

Re: AHK: посещаемые URL

Что такое "посещаемые URL"?

3

Re: AHK: посещаемые URL

Урл на который зашел человек в каком-либо браузере

4

Re: AHK: посещаемые URL

Можно периодически проверять содержимое адресной строки или строки состояния.

5 (изменено: Grey, 2011-10-02 15:27:46)

Re: AHK: посещаемые URL

propostaff пишет:

Возможно ли с помощью AHK отслеживать посещаемые URL...

Если в браузере есть стандартный контрол в котором располагается адресная строка, то не сложно взять от туда информацию, а вот если контрол не определяется как на пример в Opera или FF, то можно эту задачу решить по средству Dynamic Data Exchange (DDE), достаточно скачать уже готовые решения и выставить нужный браузер.

propostaff пишет:

...насколько это сложно...

Это Вам решать.

; http://www.autohotkey.com/forum/post-121422.html&sid=c2e6ca647e407e4e4514de2e39f2815c#121422
SetTimer, CheckURL, 1000
Return

CheckURL:
Itr++
;sServer := "iexplore"
sServer := "opera"
;sServer := "firefox"
sTopic := "WWW_GetWindowInfo"
sItem := "0xFFFFFFFF"
idInst := DdeInitialize()
hServer := DdeCreateStringHandle(idInst, sServer)
hTopic := DdeCreateStringHandle(idInst, sTopic)
hItem := DdeCreateStringHandle(idInst, sItem)
hConv := DdeConnect(idInst, hServer, hTopic)
hData := DdeClientTransaction(0x20B0, hConv, hItem)
sData := DdeAccessData(hData)
DdeFreeStringHandle(idInst, hServer)
DdeFreeStringHandle(idInst, hTopic)
DdeFreeStringHandle(idInst, hItem)
DdeUnaccessData(hData)
DdeFreeDataHandle(hData)
DdeDisconnect(hConv)
DdeUninitialize(idInst)
Loop, Parse, sData, CSV
   If A_Index = 1
      sURL := A_LoopField
   Else If A_Index = 2
      sTitle := A_LoopField
RegExMatch(sTitle, "(?<=\[).*(?=\])", sTitle) ; эта строка нужна, если браузер опера
If (Itr >= 1 And PassedURL <> sURL)
{
   IfNotExist, % A_ScriptDir "\HistoryURL.txt"
      FileAppend, % sURL "`n"sTitle, % A_ScriptDir "\HistoryURL.txt"
   Else
   {
      Loop, Read, % A_ScriptDir "\HistoryURL.txt"
      {
         If (A_LoopReadLine = sURL)
            MsgBox, 4,, % "совпадение в строке №"A_Index
                    . "`n`nтекущий URL: "sURL
                      . "`nURL из истории: "A_LoopReadLine
                    . "`n`nназвание страницы: "sTitle
                    . "`n`n`t`t`t`t`tпродолжить отчёт?", 2
         IfMsgBox, No
            Break
      }
      FileAppend, % "`n`n"sURL "`n"sTitle, % A_ScriptDir "\HistoryURL.txt"
   }
}
Else
   Itr :=
PassedURL := sURL
Return

DdeInitialize(pCallback = 0, nFlags = 0)
{
   DllCall("DdeInitialize", "UIntP", idInst
                          , "UInt", pCallback
                          , "UInt", nFlags
                          , "UInt", 0)
   Return idInst
}

DdeUninitialize(idInst)
{
   Return DllCall("DdeUninitialize", "UInt", idInst)
}

DdeConnect(idInst, hServer, hTopic, pCC = 0)
{
   Return DllCall("DdeConnect", "UInt", idInst
                              , "UInt", hServer
                              , "UInt", hTopic
                              , "UInt", pCC)
}

DdeDisconnect(hConv)
{
   Return DllCall("DdeDisconnect", "UInt", hConv)
}

DdeAccessData(hData)
{
   Return DllCall("DdeAccessData", "UInt", hData, "UInt", 0, "Str")
}

DdeUnaccessData(hData)
{
   Return DllCall("DdeUnaccessData", "UInt", hData)
}

DdeFreeDataHandle(hData)
{
   Return DllCall("DdeFreeDataHandle", "UInt", hData)
}

DdeCreateStringHandle(idInst, sString, nCodePage = 1004)
{
   Return DllCall("DdeCreateStringHandle", "UInt", idInst
                                         , "UInt", &sString
                                         , "int", nCodePage)
}

DdeFreeStringHandle(idInst, hString)
{
   Return DllCall("DdeFreeStringHandle", "UInt", idInst, "UInt", hString)
}

DdeClientTransaction(nType, hConv, hItem, sData = ""
                   , nFormat = 1, nTimeOut = 10000)
{
   Return DllCall("DdeClientTransaction", "UInt", sData = "" ? 0 : &sData
                                        , "UInt", sData = "" ? 0 : StrLen(sData)+1
                                        , "UInt", hConv
                                        , "UInt", hItem
                                        , "UInt", nFormat
                                        , "UInt", nType
                                        , "UInt", nTimeOut
                                        , "UIntP", nResult)
}

Esc::ExitApp

Чуть подправил код, потому как, когда совпадений много, то устанешь ждать, пока они все отобразятся.

6

Re: AHK: посещаемые URL

http://www.imagepost.ru/images/1/yu/1yu_3.PNG

В актив видоу инфо во всех браузерах в графе >>>>( TitleMatchMode=slow Visible Text )<<<< отображается URL открытой страницы. Можно каким-либо образом извлекать информацию от туда?

7 (изменено: Grey, 2011-09-22 22:06:59)

Re: AHK: посещаемые URL

propostaff пишет:

...во всех браузерах...

Не во всех, опять таки только в тех у которых адресная строка находится в контроле и этот контрол стандартный (IE, Google Chrome). Из IE я могу скопировать адрес двумя способами:

DetectHiddenWindows, On
ControlGetText, CText, Edit1, ahk_class IEFrame
MsgBox, % CText

или

DetectHiddenWindows, On
PostMessage, 0xB1, 0, -1, Edit1, ahk_class IEFrame ; EM_SETSEL
Sleep, 25
PostMessage, 0x301,,, Edit1, ahk_class IEFrame ; WM_COPY
Sleep, 25
MsgBox, % Clipboard

Из Google Chrome (почему-то не получается по классу окна...) тоже почти такими же двумя:

DetectHiddenWindows, On
SetTitleMatchMode, RegEx
ControlGetText, CText, Chrome_OmniboxView1, Google Chrome
MsgBox, % CText

и

DetectHiddenWindows, On
SetTitleMatchMode, RegEx
PostMessage, 0xB1, 0, -1, Chrome_OmniboxView1, Google Chrome
Sleep, 25
PostMessage, 0x301,,, Chrome_OmniboxView1, Google Chrome
Sleep, 25
MsgBox, % Clipboard
Sleep, 25 ; в контроле остаётся выделение текста,
PostMessage, 0xB1, -1,, Chrome_OmniboxView1, Google Chrome ; приходится его снимать, чего нет в IE

Ну а в Opera и FF, как я уже говорил, контролы устроены не стандартно и они не определяются, по этому считаю сбор информации через DDE технологию универсальным вариантом (правда у меня не получилось приобщить туда Google Chrome - sServer := "chrome").

8

Re: AHK: посещаемые URL

Grey пишет:

...правда у меня не получилось приобщить туда Google Chrome - sServer := "chrome").

Теперь ясно почему.

9 (изменено: Александр_, 2011-09-26 01:09:22)

Re: AHK: посещаемые URL

propostaff пишет:

Возможно ли с помощью AHK отслеживать посещаемые URL и при совпадении с URL из списка производить какое-либо действие?
Если возможно насколько это сложно и в какую сторону копать?

Заранее спасибо за ответы.

Я бы посоветовал пустить трафик интересующих вас программ через Wicked Patcher. В нём имеется поддержка скриптов(описание языка тут), которые позволяют производить любые манипуляции с пакетами.