1 (изменено: Krot66, 2017-03-15 19:14:23)

Тема: AHK: Поиск в Интернете

Возникло из бесконечной маеты с поиском и попыток найти что-нибудь подходящее в природе.

Возможности:

- интернет-поиск по горячим клавишам выделенного в любом приложении текста в соответствии с созданными правилами

- поиск по сайту, открытому в окне браузера или заранее определенному

- возможность создания множественного поиска, когда по одной клавише ищется текст в нескольких поисковых системах, на нескольких сайтах и пр.

- использование различных параметров поисковых систем, в том числе и требующих запроса текущего адреса в браузере

- если под курсором находится файл в проводнике или файловом менеджере, производится поиск по имени файла (опционально - с отбрасыванием расширения)

- поиск по треку под курсором в некоторых медиаплеерах (foobar2000, Hokrain)

- поиск информации по открытому сайту

- сохранение истории запросов (файл Search_history.txt), доступной через выпадающее меню

- возможность использования поиска внутри текущего окна недефолтного браузера без переключения на основной. Скрипт создает вкладки и отправляет в них запросы.

При нажатии горячей клавиши скопированный текст отправляется непосредственно браузеру (во избежание конфликтов используется в качестве модификатора клавиша CapsLock, которая после возвращается в выключенное состояние). Если ничего не скопировано, а также при секундном зажатии CapsLock для редактирования текста, появляется окно (его же можно также вызвать по CapsLock+`):



http://savepic.su/7618013m.png


Функция поиска имеет вид:

Search(url,par,s_name)

Здесь:
url - собственно строка поиска или связанная с ней переменная (несколько таких переменных для основных поисковых систем прописаны в начале скрипта),
par - дополнительные параметры,
s_name - название поиска, отображаемое в выпадающем меню (по ней же скрипт определяет начало нового поиска и сбрасывает значения переменных).

Есть два способа определения url:
1. С помощью браузера Opera 12. Щелкаем правой кнопкой по форме поиска, выбираем "Create Search", появляется маленькое окошко. Если строка "Query String" пуста, копируем строку "Address" и имеем готовый url. Если указанная строка непуста, для поиска по сайту можно почти всегда использовать внешние поисковики, о чем ниже.
2. Способ второй, кустарный, но работающий на чем угодно: следует ввести в интересующую поисковую форму какой-то простой английский текст (например, test) и нажать ввод. Далее копируем адрес открывшейся страницы и заменяя "test" на "%s" получаем требуемый url. Если в адресной строке не удается найти "test" (происходит возврат к исходному или слегка видоизмененному адресу), данный рецепт не работает и следует использовать поиск по сайту сторонней поисковой системой.
На некоторых сайтах возникает ошибка в кодировке введенного текста. Это означает, что текст следует передавать в кодировке ANSI вместо юникода, для чего в строку url следует добавить в начале "#".
Вторая переменная "par" соответствует параметрам поиска - в нее можно вписать все, что соответствует синтаксису запросов используемого поисковика.

Так что

Search(google,"site:forum.script-coding.com","...")

- поиск гууглом по этому форуму,

Search(google,"site:forum.script-coding.com intitle:AutoHotkey","...")

- поиск по его аутохоткейным веткам,

Search(duckduckgo,"site:litmir.me,lib.ru","...")

- поиск по нескольким сайтам с DuckDuckGo.

Для того, чтобы передать в параметры адрес открытой в браузере страницы, используются переменная $url, равная ее точному адресу, и переменная $site, соответствующая корневому каталогу сайта. Следует отметить, что при наличии $url или $site в параметрах скрипт не показывает окно при отсутствии скопированного текста без зажатия CapsLock.
Добавление в начале или в конце второго параметра "noclip" приводит к игнорированию скопированного текста (не адреса страницы!), что может быть использовано для поиска информации о сайте, не требующей ничего, кроме его адреса.

Таким образом

Search(google,"site:$site","...")

- поиск текста по открытому в браузере сайту,

Search(google,"noclip cache:$url","...")

- поиск кэшированной версии открытой страницы.

Search("https://whois.domaintools.com/%s","noclip $site","...")

- поиск информации об открытом сайте на whois.domaintools.com

Множественный поиск осуществляется простой последовательностью

     Hotkey::
     Search(...)
     .........
     Search(...)
     return

При этом название поиска во всех функциях, кроме первой должно отсутствовать. Если есть желание сделать множественный поиск с использованием адреса текущей страницы, одну из таких функций следует поставить на первое место - тогда его значение будет передано последующим.
Во всех случаях при желании для выбора поиска только из окна GUI можно использовать метки вместо клавиш, например цифровые.


#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance, force
Menu Tray, Icon, shell32.dll, 23
Menu Tray, Add
Menu Tray, Add, Help, F1
Menu Tray, Add, Open, Open
Menu Tray, Default, Open
SetTitleMatchMode 2
SetTitleMatchMode Slow

/*
        Скрипт для поиска в интернете
http://forum.script-coding.com/viewtopic.php?id=10357

В окне скрипта:
    F1 или пункт меню в трэе - cтраница скрипта со справкой     
    Ctrl+Up/Down - выбор поиска
    Home/End - первый и последний поиск
    Alt+Down - история поиска
    Left/Right автоматически возвращают фокус в поле ввода
    Enter или двойной клик по поиску - запуск поиска
    Средняя кнопка - переключение режима поверх всех окон
    Escape - закрытие окна
    
CapsLock + Ctrl или двойной щелчок по иконке в трэе - открытие окна поиска
CapsLock + F - поиск выделенного текста на странице браузера
CapsLock + \ - открытие текстовых url
*/
    
;-------- Основные поисковики ---------
bing:="http://www.bing.com/search?q=%s&go=Submit&qs=bs&form=QBLH"
duckduckgo:="https://duckduckgo.com/?q=%s"
google:="https://www.google.ru/search?client=opera&q=%s&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest&gws_rd=ssl"
nigma:="http://nigma.ru/?s=%s&t=web"
yandex:="http://yandex.ru/yandsearch?lr=157&oprnd=8221201798&text=%s"

;-------- Настройки -----------
def_search:=google ; поисковая система (см. выше) или строка url, используемая по умолчанию
sh:=30 ; размер истории поисковых запросов
fs:=12 ; размер шрифта диалогового окна
width:=860 ; ширина поля ввода
rows:=16 ; число строк в окне выбора поиска
del_ext:=1 ; отбрасывть расширение при поиске по файлу в файловом менеджере,  проводнике или плеере
def_br:="" ; путь к основному браузеру (при необходимости)
def_key:="CapsLock" ; кнопка, зажатие которой при поиске выделенного текста ведет к появлению окна (менять при переходе с CapsLock на другие дополнительные клавиши). Если переменная пуста, после нажатия будет всегда открываться окно с выбранным поиском и скопированным текстом
key_delay:=0.8 ; время зажатия дополнительной клавиши для появления интерфейса со скопированным текстом, секунд
s_sort:=0 ; сортировка поисков по алфавиту в выпадающем списке. Если имя поиска начинается с цифр, поставленных для сортировки, они не будут отображаться в окне 
highlight:=2 ; подсветка скопированного текста в окне (1 - всегда, 2 - только если результат получен из скопированного файла или при вызове по CapsLock & Ctrl)
ontop:=1 ; окно поверх всех окон
curr_br:=1 ; использовать для поиска активное окно недефолтного браузера
browsers:="Internet Explorer,Maxthon,ahk_class MozillaWindowClass,ahk_class Chrome_WidgetWin_1" ;  определения окон недефолтных браузеров, через запятую (все, что может быть вписано в команду IfWinActive - фрагменты заголовков окон, ahk_class ..., ahk_exe ... или их комбинации). Желательно, чтобы используемого по умолчанию здесь не было, т.е. поиск в нем запускался напрямую
del_end:="Больше информации на http|Читайте далее: http|Читать далее: http|Подробности: http" ; начала обрезаемых хвостов, добавляемых скриптами на веб-страницах при копировании текста, разделенные "|"
;---------------------------------
goto start
CapsLock::CapsLock
; ~Capslock::SetCapsLockState Off ; для полного выключения CapsLock

Open:
CapsLock & Ctrl::
open:=1

; далее описания в 3-м параметре 1-й функции

CapsLock & vk53::Search(,,"Поиск в Интернете")

CapsLock & vk44::Search(,"site:$site","Поиск по сайту")

CapsLock & vk5A::
    Search(duckduckgo,,"Nigma и DuckDuckGo - альтернативный поиск")
    Search(nigma)
    return

CapsLock & vk43::
    Search(google,"noclip related:$url","Google: кэш, ссылающиеся и связанные страницы")
    Search(google,"noclip link:$url")
    Search(google,"noclip cache:$url")
    return
    
CapsLock & vk49::
    Search("https://www.mywot.com/ru/scorecard/%s","noclip $site","WHOIS, WOT - информация о сайте")
    Search("https://whois.domaintools.com/%s","noclip $site")
    return
    
CapsLock & vk4D::Search("http://maps.google.com/maps?q=%s",,"Google Maps")
    
CapsLock & vk45::Search("www.multitran.ru/c/m.exe?CL=1&s=%s&l1=1",,"Перевод в Multitran-eng")
    
CapsLock & vk51::Search("https://translate.google.com/#en/ru/%s",,"Google Translate - перевод выделенного текста")

CapsLock & vk54::Search("https://translate.google.com/translate?sl=en&tl=ru&js=y&prev=_t&hl=ru&ie=UTF-8&u=%s&edit-text=","noclip $site","Google Translate - перевод сайта")

CapsLock & vk57::
    Search("https://en.wikipedia.org/w/index.php?search=%s&title=Special%3ASearch&go=Go",,"Wikipedia Rus+Eng")
    Search("https://ru.wikipedia.org/w/index.php?search=%s&title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%3A%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&go=%D0%9F%D0%B5%D1%80%D0%B5%D0%B9%D1%82%D0%B8")
    return

CapsLock & vk41::
Search(,"site:forum.script-coding.com intitle:AutoHotkey","Autohotkey - документация и Серый форум")
    Search("http://cse.google.com/cse?cx=010629462602499112316:ywoq_rufgic&q=StringReplace#gsc.tab=0&gsc.q=%s&gsc.sort=&gsc.ref=more%3Adocumentation")
    Search("http://ahk-wiki.ru/search?q=%s")
    return

CapsLock & vk4E::Search("https://social.msdn.microsoft.com/Search/ru-RU?query=%s&emptyWatermark=true&ac=2",,"Поиск в MSDN")

CapsLock & vk48::Search("http://htmlbook.ru/sites/search/?q=%s&x=0&y=0",,"Поиск в htmlbook.ru")

CapsLock & vk50::
    Search(,"site:http://forum.ru-board.com","Поиск программ (Softodrom, ru-board и Softpedia)")
    Search("http://www.softpedia.com/dyn-search.php?search_term=%s&x=0&y=0")
    Search("http://www.softodrom.ru/Поиск/?text=%s&where=soft")
    return

CapsLock & vk59::
    Search("http://dic.academic.ru/searchall.php?SWord=%s&from=xx&to=ru&did=&stype=0",,"Поиск на Академике")
    
CapsLock & vk4C::
    Search("#http://lib.ru/GrepSearch?Search=%s",,"Большой поиск книг")
    Search(,"site:litmir.me")
    Search(,"site:ihtik.lib.ru")
    Search("http://ru.wikisource.org/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%3A%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&profile=default&search=%s&fulltext=Search")
     Search("http://www.koob.pro/search/?q=%s&cx=005981379277374831887%3A0jyriruaxh4&cof=FORID%3A9")
    Search("#http://www.e-reading.club/?query=%s")
    return

CapsLock & vk42::Search("http://flibusta.is/booksearch?ask=%s",,"Флибуста - поиск книг")
    
CapsLock & vk56::
    Search("http://rutracker.org/forum/tracker.php?nm=%s",,"Поиск видео")
    Search("#http://search.tfile.co/?q=%s")
    Search(,"site:telepoisk.com")
    Search(,"site:tvkultura.ru/video")
    Search("http://yandex.ru/video/search?text=%s&safety=1&path=main")
    Search("http://www.youtube.com/results?search_query=%s&oq=&gs_l=")    
    return
    
CapsLock & vk52::
    Search(nigma,"torrent","Поиск торрентов")
    ;~ Search(duckduckgo,"torrent")
    ;~ Search("http://bitsnoop.com/search/all/%s/c/d/1/")
    Search("https://torrentproject.se/?t=%s")
    Search("http://tracker.ru/search?q=%s")
    Search("#http://search.tfile.co/?q=%s")
    Search("https://rutracker.org/forum/tracker.php?nm=%s")
    return
    
CapsLock & vkE2::Search("%s",,"Открытие текстового url")

;----------------------------
CapsLock & vk46::
KeyWait CapsLock, T2
Clipboard:=""
Send ^{vk43}
ClipWait 1
Clipboard:=RegExReplace(Clipboard,"(" del_end ").+$","")
Send ^{vk46}
Sleep 500
Send {Bs 15}^{vk56}{Enter}
SetCapsLockState Off
return
;----------------------------
start:
n:=0
Loop Read, % A_ScriptName
{
    If A_LoopReadLine~="^\s*(/\*|\*/)"
	{
		comment:=!comment
		continue
	}
	If (A_LoopReadLine~="^\s*;" || comment)
		continue     
    If RegExMatch(A_LoopReadLine,"^[^(]+?(?=:{1,2})",k)
        key:=Trim(k), string:=A_Index
    If (RegExMatch(A_LoopReadLine,"(?<=Search\().+(?=\))",s_arg) && (A_Index-string)<2 && key)
    {
        Loop Parse, s_arg, CSV
        {
            If (A_Index=3 && A_LoopField)
                stack.="|" A_LoopField, n+=1, key%n%:=key, key:=""
        }
    }
}

StringReplace stack, stack, ", , All
StringTrimLeft stack, stack, 1
stack_0:=stack
If s_sort
{
    Sort stack, D|
    stack:=RegExReplace(stack,"(^|\|)\K\d+")
}

FileEncoding utf-8
s_name_old:=RegExReplace(stack,"\|.+$")
return

Search(url="",par="",s_name="")
{
    global
    url_start:=url, par_start:=par
    If !url
        url:=def_search 
    If (s_name && !open)
        s_name_old:=s_name
    If (s_name && !clip) || open
    {
        ctrl_start:=ctrl_delay:=1
        If !open && def_key
        {
            KeyWait %def_key%, T%key_delay%
            If !ErrorLevel
                ctrl_start:=ctrl_delay:=0
        }
        clipboard_old:=Clipboard, s_numb:=1
        WinGetActiveTitle title
        id:=WinActive("A")
        Clipboard:=""
        If title contains Far 1,Far 2,Far 3
            Send {Esc}
        Send ^{vk43}
        ClipWait 1
        clip:=Trim(Clipboard)
        If (clip~="^https?://\S+$" && url_start!="%s")
            clip:=""
        If del_end
            clip:=RegExReplace(clip,"(" del_end ").+$","")`
        clip:=RegExReplace(clip,"\R|#"," ")
        RegExMatch(clip,"im)^[A-Z]:\\.+$",path)
        If (path && del_ext)
            SplitPath clip, , , , clip
        If (path && !del_ext)
            SplitPath clip, clip
    }
    If !clip && !open && (s_numb>1)
        clip:=clip_old
    SetCapsLockState Off
    FileAppend, , Search_history.txt
    FileRead s_list, Search_history.txt
    s_stack:="", s_out:="", n1:=0, n2:=0
    Loop Parse, s_list, `n,`r
    {
        If !A_LoopField
            continue
        s_stack:=A_LoopField "|" s_stack, clip_end:=A_LoopField
        n1+=1
    }
    If (clip && clip!=clip_old && clip!=clip_end)
    {
        Loop Parse, s_list, `n,`r
        {
            n2+=1
            If (!A_LoopField || n1-n2>sh-2)
                continue
            s_out.= A_LoopField "`r`n"
        }
        s_stack:=clip "|" s_stack
        FileDelete Search_history.txt
        FileAppend % s_out . clip, Search_history.txt
    }
    If ctrl_delay || (!clip && !(par_start~="noclip")) || open
    {
        Gui 1:Destroy
        Gui 1:New, -DPIScale LastFound, Поиск в Интернете
        If ontop
            Gui 1:+AlwaysOnTop
        Gui 1:font, Arial s%fs%
        Gui 1:Color, D7D7D7
        Gui 1:Margin , 10, 6
        Gui 1: Add, ListView, r%rows% w%width% Grid -Multi NoSortHdr gListView, Search|Hotkey
        Loop Parse, stack, `|
        {
            If A_LoopField contains % s_name_old
                select_raw:=A_Index            
            kkk:=GetKeyName(RegExReplace(key%A_Index%,".+(?=(vk|sc))"))
            prefix:=RegExReplace(key%A_Index%,"(vk|sc)\S+$")
            prefix:=RegExReplace(prefix," ?& ?"," + ")
            StringUpper kkk,% RUEN(kkk)
            If key%A_Index% not contains ^,+,!,&
                prefix:=kkk:=""
            LV_Add("",A_LoopField,prefix . kkk)
        }
        LV_ModifyCol(1,width-250)
        LV_ModifyCol(2,200)
        LV_Modify(n,"+Select Vis")
        LV_Modify(select_raw,"+Select Vis")
        Gui 1:Add, ComboBox, vclip wp Choose1, % s_stack
        GuiControl Focus, Edit1
        Gui 1:font, s10
        b_width:=width//1.6, x_b:=(width-b_width)//2
        Gui 1:Add, Button, x%x_b% w%b_width% h32 Default -TabStop, Search                
        Gui 1:Show, Center
        If ((!highlight || !(highlight=2 && path)) && A_ThisHotkey!="CapsLock & Ctrl")
            Send {End}
        If !clip
            GuiControl Text, Edit1  
        ctrl_start:=ctrl_delay:=open:="", Clipboard:=clipboard_old
        Sleep 2000
        SetCapsLockState Off
        Exit
    }
    If (s_name && par_start~="\$(url|site)")
    {
        Clipboard:=$url:=$site:=""
        Send ^{vk4C}
        Sleep 200
        Send ^{Ins}
        ClipWait 0.5
        $url:=Trim(Clipboard)
        If !($url~="^https?://\S+$")
        {
            MsgBox, 262160, Ошибка, Адрес недоступен!, 1
            Exit
        }        
        $site:=RegExReplace($url,"^.+://")
        $site:=RegExReplace($site,"/.+$")
    }
    StringReplace par, par, $url, % $url, All
    StringReplace par, par, $site, % $site, All
    Enc:="UTF-8"
    If (url~="^#")
        Enc:="CP1251", url:=RegExReplace(url,"^#")
    If par_start~="noclip"
        par:=Trim(StrReplace(par,"noclip"))
    else
        par:=Trim(clip " " par)
    If (url_start="%s")
        url:=clip, par:=""
    StringReplace url, url, http://
    StringReplace url, url, https://
    url:="http://" url
    StringReplace url, url, `%s, % UriEncode(par,Enc)        
    ;~ OutputDebug % "clip: " clip " par: " par " $url: " $url " $site: " $site "`nurl: " url
    WinGetActiveTitle t2
    If curr_br
    {
        Loop Parse, browsers, `,
        {            
            If WinActive(A_LoopField)           
            {
                Send ^{vk54}
                WinWaitNotActive % t2, , 1
                Sleep 50
                Clipboard:=url
                Send {Bs 15}^{vk56}{End}{Enter}
                Sleep 500
                goto end
            }
        }
    }
    If def_br
        Run % def_br " " url
    else
        Run % url
    If (s_numb=1)
        WinWaitNotActive % t2, , 5
    Sleep 200
    end:
    If s_numb=1
        s_name_old:=s_name
    s_numb+=1, ctrl_delay:="" 
    Clipboard:=clipboard_old, clip_old:=clip, clip:=""
    KeyWait % def_key, T2
    Sleep 100
    SetCapsLockState Off
    return
}

ListView:
If (A_GuiEvent!="DoubleClick")
    return
ButtonSearch:
Gui 1: Submit
ControlGet sel, List, Selected, SysListView321
sel:=Trim(RegExReplace(sel,"\t.+$"))
WinActivate ahk_id %id%
Loop Parse, stack_0, `|
{
    If A_LoopField contains % sel
    {
        sn:=A_Index
        break
    }
}
clip:=Trim(clip)
goto % key%sn%

GuiClose:
GuiEscape:
ControlGet sel, List, Selected, SysListView321
s_name_old:=Trim(RegExReplace(sel,"\t.+$"))
Gui 1: Submit
clip:=ctrl_delay:=""
return

#If WinActive("ahk_pid " DllCall("GetCurrentProcessId"))
MButton::
ontop:=!ontop
goto Open

F1::
Run http://forum.script-coding.com/viewtopic.php?id=10357
return

^Up::
If !sel:=LV_GetNext("F")-1
    sel:=1
LV_Modify(sel,"Select Focus Vis")
return

^Down::LV_Modify(LV_GetNext("F")+1,"Select Focus Vis")

PgUp::
If LV_GetNext("F")<rows
    LV_Modify(1,"Select Focus Vis")
else
    LV_Modify(LV_GetNext("F")-rows,"Select Focus Vis")
return

PgDn::
If LV_GetNext("F")+rows>n
    LV_Modify(n,"Select Focus Vis")
else
    LV_Modify(LV_GetNext("F")+rows,"Select Focus Vis")
return

Home::LV_Modify(1,"Select Focus Vis")

End::LV_Modify(n,"Select Focus Vis")

!Down::
ControlFocus Edit1
Send !{Down}
return

Enter::
NumpadEnter::
goto ButtonSearch

^vk56::
ControlFocus Edit1
Send ^{vk56}
return

~Left::
~Right::
ControlFocus Edit1
return

#IfWinActive

UriEncode(Uri,Enc)
{
    StrPutVar(Uri, Var, Enc)
    f := A_FormatInteger
    SetFormat, IntegerFast, H
    Loop
    {
        Code := NumGet(Var, A_Index - 1, "UChar")
        If (!Code)
            Break
        If (Code >= 0x30 && Code <= 0x39 ; 0-9
            || Code >= 0x41 && Code <= 0x5A ; A-Z
            || Code >= 0x61 && Code <= 0x7A) ; a-z
            Res .= Chr(Code)
        Else
            Res .= "%" . SubStr(Code + 0x100, -1)
    }
    SetFormat, IntegerFast, %f%
    Return, Res
}

StrPutVar(Str, ByRef Var, Enc = "")
{
    Len := StrPut(Str, Enc) * (Enc = "UTF-16" || Enc = "CP1200" ? 2 : 1)
    VarSetCapacity(Var, Len, 0)
    Return, StrPut(Str, &Var, Enc)
}

RUEN(t)
{
    en:="qwertyuiop[]asdfghjkl;'\\zxcvbnm,./"
    ru:="йцукенгшщзхъфывапролджэ\\ячсмитьбю."
    If p:=InStr(ru,t)
        t:=SubStr(en, p, 1)
    return t
}


2

Re: AHK: Поиск в Интернете

Сыро. Например:

https://cloclo18.cloud.mail.ru/weblink/thumb/w3/aa2df62cd04e/2015.01.21-10.48.27.5.jpg

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3 (изменено: Krot66, 2015-01-21 12:14:49)

Re: AHK: Поиск в Интернете

И с чем это может быть связано? Скрипт читает строки в самом себе и выводит их в меню. У меня с 32-битной системой и последней юникодной AHK ничего подобного нет

Добавлено:
В заголовке FileEncoding utf-8 (делалось из соображения, мало кто и что там будет искать), так что не юникодная кодировка скрипта не будет проходить

4

Re: AHK: Поиск в Интернете

Не имею понятия. Я даже не пойму по вашему коду, откуда скрипт эти строчки берёт. Система и AHK 64-бит.
Но это не единственный недостаток, который я заметил. Если выбрать что-то из «истории поиска» и нажать «ОК», почему-то буфер обмена иногда посылается в активное окно, затем ничего не происходит. А иногда вдруг начинает открываться во всех поисковых системах сразу.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5

Re: AHK: Поиск в Интернете

Скрипт разбирает строки регулярными выражениями (ищет клавишу, а после ближайшую функцию с названием поиска)

6

Re: AHK: Поиск в Интернете

Ну, наверное, плохо разбирает. smile Krot66, я уверен, проблема в вашей невнимательности. Вот смотрите, вы уже два раза точки в конце предложений пропустили, а регулярные выражения — куда более сложная тема. wink

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK: Поиск в Интернете

Русский человек не ставит точек в конце писем smile

8

Re: AHK: Поиск в Интернете

Ну, не знаю, как там русский, форум у нас интернациональный, и у нас есть правила. И знаете, практика показывает, что чем меньше участник их нарушает, тем лучше качество его кода. И наоборот.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

9 (изменено: Krot66, 2015-01-21 12:37:58)

Re: AHK: Поиск в Интернете

Запустил под виртуалкой, правда тоже 32-битной. И символы, и функционал в полном порядке.

10

Re: AHK: Поиск в Интернете

Ничем не могу помочь, тем более, что правила вы не выполняете. Вообще-то, у нас за систематическое их нарушение бан полагается, у вас ещё есть шанс исправиться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

11

Re: AHK: Поиск в Интернете

Поменял кодировку на utf-8 — вроде, заработало. Но зачем так заумно-то? Зачем читать код скрипта второй раз? Он ведь и так уже в памяти находится. Не проще список поисковых систем поместить в обычную переменную и не извращаться?
Кроме того, клавиша «\» на обычной клавиатуре — vkDC, а не vkE2. Соответственно, тоже не работает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

12

Re: AHK: Поиск в Интернете

Убрал строку с требованием кодировки, клавишу поменял на Z. Скрипт читает не переменные поиска, которые просто задекларированы, а повешенные на клавиши последовательности поисковых запросов. Делать отдельный конфигурационный файл мне не хотелось - так скрипт сам читает то, что в нем есть и помещает в меню. Надо только помнить, что название поиска присутствует лишь в первой фунции последовательности.

13

Re: AHK: Поиск в Интернете

Krot66 пишет:

Скрипт читает не переменные поиска, которые просто задекларированы, а повешенные на клавиши последовательности поисковых запросов. Делать отдельный конфигурационный файл мне не хотелось - так скрипт сам читает то, что в нем есть и помещает в меню.

Так я и говорю, что нет смысла читать код скрипта дважды — один раз при загрузке, второй отдельно для построения списков. Это просто нелогично. Конфигурационный файл делать не обязательно, достаточно поместить всё в переменные, или, например, в массив, и в дальнейшем пользоваться во всех случаях уже загруженными данными.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

14 (изменено: Krot66, 2015-01-25 17:17:35)

Re: AHK: Поиск в Интернете

Исправлена кодировка истории.

15

Re: AHK: Поиск в Интернете

Krot66, у вас время до вечера, чтобы исправиться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

16

Re: AHK: Поиск в Интернете

Точка поставлена.

17

Re: AHK: Поиск в Интернете

Надеюсь, что так будет и впредь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

18

Re: AHK: Поиск в Интернете

Не разобрался — можно ли настроить передачу запроса в первое найденное неактивное/активное окно Оперы/Мозиллы/Хрома — но не IE? Выставлял единицу в "curr_br" — тем не менее, лезет неумолчальный у меня IE, не понятно где в скрипте прописанный)) И ещё по горячим клавише у меня выводится копия GUI.

19

Re: AHK: Поиск в Интернете

Здесь имеется ввиду привязка к протоколу, а не файловой ассоциации. Если открытое окно имеет фрагмент, прописанный в переменной browsers, он открывает новую вкладку и вводит в нее адрес. Физически скрипт не может вызвать что-то самопроизвольно - он либо использует умолчания, либо подходящее окно браузера.
Можно зайти в меню Help какой-нибудь программы и посмотреть, в чем будет открываться ее домашняя страница (это есть в панели управления в Default Programs). В Windows 8 - 10 нельзя обычными средствами ассоциировать протокол с портативным браузером.

20 (изменено: DD, 2017-02-06 13:33:35)

Re: AHK: Поиск в Интернете

Все-таки, на Win7 происходит иначе: активное окно имеет в заголовке "Opera", что я указываю в переменных по-всякому, —

browsers:="Opera,Maxthon,Pale Moon"
browsers:="- Opera,Maxthon,Pale Moon"
browsers:="Opera,Internet Explorer,Maxthon,Pale Moon"

в сочетании с вариантами для переменной "curr_br" — 0/1. Все равно стартует IE, а активное окно Оперы игнорируется. Может дело в строке Run % url, которая другого, вроде, и не предполагает?

21

Re: AHK: Поиск в Интернете

Подождите несколько дней: выложу слегка обновленную версию, которой пользуюсь сейчас, и добавлю в нее возможность прописывать браузер по умолчанию. Будет и возможность более точного указания недефолтных браузеров через класс или исполняемый файл.

+ DD

22

Re: AHK: Поиск в Интернете

Спасибо. В идеале хотелось бы, чтобы в первую очередь реакция была на активный браузер, а иначе — на прописанный.

23

Re: AHK: Поиск в Интернете

Скрипт и описание обновлены. Помимо сказанного, добавлена возможность запросов без учета скопированного текста (смотри "noclip"), сделано меню с возможностью вызова GUI двойным щелчком по иконке в трэе, при этом окно выводится в состоянии последнего поиска. Добавлены поиск выделенного на странице текста в браузерах и открытие текстовых url. Множество мелких исправлений и улучшений. Обновлен набор поисковиков.
Всюду используется в качестве модификатора клавиша CapsLock - после использования она переводится в выключенное состояние.

24 (изменено: DD, 2017-02-10 07:21:40)

Re: AHK: Поиск в Интернете

Обнаружилось, что поисковая строка скрипта над активным окном старой Оперы (с классом "OperaWindowClass" — который в том числе вписывал в переменную "browsers"), вызывает все тот же IE. И то же поведение над активным окном новой Оперы (с классом "Chrome_WidgetWin_1"), во вкладки которой лишь однажды данные передались. В том фрагменте кода, где обрабатываются прописанные в "browsers" окна, вписанный мной msgbox не вывелся, хотя окна были активны.


        Loop Parse, browsers, `,
        {            
            If WinActive(A_LoopField)           
            {
msgbox
                Send ^{vk54}
                WinWaitNotActive % t2, , 1
                Sleep 50
                Clipboard:=url
                Send {Bs 15}^{vk56}{Enter}
                Sleep 500
                goto end
            }
        }

Кроме того, во всех браузерах выделенный или скопированный текст в окно GUI не передаётся, а скопированный текст после показа поискового окна тут же очищается из буфера. Может там какой-то задержки не достаёт для точности?

25 (изменено: Krot66, 2017-02-10 12:33:13)

Re: AHK: Поиск в Интернете

Вписал в конце (!) переменной browsers "ahk_class OperaWindowClass" (у меня Опера стоит по умолчанию - поэтому ее и нет в перечне) - и все открывается через нее. Причем если после строки  Send {Bs 15}^{vk56}{Enter} добавить звуковой сигнал, он будет раздаваться после открытия каждой вкладки, т.е. срабатывает запуск через ввод адреса, а не через командную строку.
Возьмите и в качестве эксперимента сделайте скрипт

Run https://www.google.com
ExitApp

и посмотрите, где он будет открываться. Скрипт не содержит никаких путей к браузерам, если, конечно, они не вписаны в переменную def_br. При этом она работает только в случае, если нет открытого недефолтного браузера из переменной browsers.

+ DD