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
Telegram jollycoder

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
Telegram jollycoder

5

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

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

6

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

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

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

7

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

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

8

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

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

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

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

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

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

10

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

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

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

11

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

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

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

12

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

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

13

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

Krot66 пишет:

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

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

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

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

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

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

15

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

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

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

16

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

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

17

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

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

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

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

26

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

Действительно — вписал класс в конце и всё заработало, буду юзать)). Но вот поведение с непередачей выделенного/скопированного текста в окно GUI, у меня сохраняется. То есть, если копировать или выделять текст в любых окнах и вызвать окно скрипта — текст в него не передаётся, а буфер очищается.
По команде "Run google.com" открылся IE.

27

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

DD пишет:

То есть, если копировать или выделять текст в любых окнах и вызвать окно скрипта — текст в него не передаётся, а буфер очищается.

Здесь прошу по подробнее - ничего не понял.

28

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

Имел в виду, что если перед поиском выделить или скопировать текст в окне браузера (или вообще в любых окнах), а затем вызвать интерфейс скрипта, то его окно будет содержать мой предыдущий поисковый запрос (набранный в него), а то, что было скопировано или выделено перед вызовом окна, в строку интерфейса не попадает и плюс очистится из буфера. Если не открывать окно скрипта, то скопированное из браузера можно вставлять в другие окна. Другие скрипты не работали.

29

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

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

30 (изменено: DD, 2017-02-11 09:09:56)

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

Чтобы предыдущий запрос из строки интерфейса не замещался на выделенный или скопированный (по вызову окна интерфейса) — это так и задумано? ИМХО, было бы логично, если бы имя файла под курсором, как и выделенный или буферный текст при вызове интерфейса, отправлялись бы в него — так же, как они сейчас передаются в браузеры по горячим клавишам, в обход интерфейса.

Krot66 пишет:

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

У меня секундное зажатие CapsLock не выводит окна.

31 (изменено: Krot66, 2017-02-11 15:00:31)

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

Если (например, по CapsLock+S) ничего не скопировано, появляется интерфейс. Он же появляется со скопированным текстом, если на секунду зажать CapsLock. Последние несколько лет у меня это работает безукоризненно.
Добавлено:
"Зажать" подразумевает не отпускать после нажатия.

32 (изменено: DD, 2017-02-11 16:16:06)

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

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

33 (изменено: DD, 2017-02-11 16:34:10)

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

А ещё резон в том, что поисковые строки в выпадающем списке будут множиться и не на все варианты станет возможно или необходимо вешать хоткеи. Поэтому перенос выделенного или скопированного текста в окно скрипта, многое упрощало бы.

34 (изменено: DD, 2017-02-11 16:40:36)

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

Кстати, убрал хоткей CapsLock & vk53:: для Search(,,"Поиск в Интернете (CapsLock+S)") — и в интерфейсе этот поиск перестал работать. Можно ли как-то убирать хоткеи, меняя их, возможно, на метки?

35 (изменено: Krot66, 2017-02-15 18:37:57)

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

Не могу себе даже представить, с чем это связано. CapsLock был подставлен только из-за того, что использую и много клавиш и во многих программах, да и пользоваться одной клавишей модификатором удобнее, чем двумя.
Скрипт анализирует собственное содержание, и генерирует пункты меню только если в первой строке есть горячая клавиша - так и должно быть.
Вариант первый. В 43-й строке замените CapsLock::CapsLock на CapsLock::Send {CapsLock}.
Вариант второй. Убрать эту строку вообще и заменить "CapsLock & " на "^!" или  "^+" (что больше нравится) во всем скрипте (кроме, разве что, описаний пунктов меню в функции Search).
Кроме того, 183 строку надо заменить на KeyWait Ctrl, T0.8 - теперь окно должно будет появляться с зажатым Ctrl, естественно, при дополнительных клавишах Ctrl+Alt или Ctrl+Shift, что вы заменили.

Добавлено:
Эта клавиша не затерлась в еще каком-нибудь скрипте?

36 (изменено: DD, 2017-02-11 19:24:45)

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

Так я не был против CapsLock — и сам её в сочетании давно использую, лишь хотел сказать, что выводить (раз уж выводить) поисковое окно целесообразнее с выделенным/буферным текстом, потому что в него потом все равно текст придется набирать или вставлять. Но это я так, в скобках заметил, для удобства опубликованного кода — для себя и сам переделаю. Но вот как быть с реализацией поисковых пунктов без хоткеев? Потому что в таком виде — с необходимостью на каждый пункт вешать клавишу (а групповыми поисками вряд ли буду пользоваться) — это не очень подходит, ибо пункты будут расти, среди них будут и не часто используемые, а никакой клавиатуры и памяти эти сочетания запомнить, у меня не хватит)).

37 (изменено: Krot66, 2017-02-11 21:36:05)

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

В принципе здесь сделано так: если окно выводится щелчком по иконке или CapsLock+`, отображается старый поиск с выделением, чтобы его можно было убрать Del или Bs. Если окно появляется с уже скопированным текстом, чтобы его невзначай не удалить и было просто редактировать, это выделение сбрасывается. Так и не понял, появляется, ли оно с зажатием CapsLock и скопированным текстом.
Насчет замены клавиш метками надо посмотреть - скорее всего, это сделаем.

38 (изменено: DD, 2017-02-12 09:27:44)

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

У меня он так действует: выделяю + копирую текст, вызываю окно скрипта из трея или по клавишам — в нем выделенный предыдущий поиск, который не всегда-то нужен бывает (и который при необходимости можно достать из выпадающего списка), потому что к окну естественней обращаться для уточнения нового поиска. Иначе говоря, если что-то было скопировано или выделено, то скорее всего именно это планируется редактировать или искать. С отдельной CapsLock по разному экспериментировал: отключал свои скрипты, копировал текст с зажатием CapsLock и т. п., но текст в окно не передавался.
Спасибо за изменения по меткам.

39

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

Попробуйте этот вариант. В основном интересует появление интерфейса при зажатом CapsLock.
Кроме того, есть настройки для пустого поля поиска при вызове интерфейса, времени зажатия клавиши, и дополнительной клавиши, если отказываться от CapsLock.

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

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

CapsLock + F1 или пункт меню в трэе - cтраница скрипта со справкой 
CapsLock + ` или двойной щелчок по иконке в трэе - открытие интерфейса
CapsLock + F - поиск выделенного текста на странице браузера
CapsLock + U - открытие текстовых url
Escape - закрытие окна
*/
    
;-------- Основные поисковики ---------
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:=700 ; ширина поля ввода
del_ext:=1 ; отбрасывть расширение при поиске по файлу в файловом менеджере или проводнике
def_br:="" ; путь к основному браузеру (при необходимости)
def_key:="CapsLock" ; кнопка, зажатие которой при поиске выделенного текста ведет к появлению окна (менять при переходе с CapsLock на другие дополнительные клавиши)
last_search:=0 ; показ последнего поиска при вызове интерфейса по горячей клавише или щелчку по иконке в трэе
key_delay:=0.8 ; время зажатия дополнительной клавиши для появления интерфейса со скопированным текстом, секунд
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
Help:
CapsLock & F1::Run http://forum.script-coding.com/viewtopic.php?id=10357
Open:
CapsLock & vkC0::
ctrl_delay:=open:=1

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

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

search:
    Search(nigma,,"Поиск")
    return

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

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

CapsLock & vk43::
    Search(google,"noclip related:$url","Google: кэш, ссылающиеся и связанные страницы (CapsLock+C)")
    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 - информация о сайте (CapsLock+I)")
    Search("https://whois.domaintools.com/%s","noclip $site")
    return

CapsLock & vk57::
    Search("https://en.wikipedia.org/w/index.php?search=%s&title=Special%3ASearch&go=Go",,"Wikipedia Rus+Eng (CapsLock+W)")
    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 - документация и Серый форум (CapsLock+A)")
    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+N)")

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

CapsLock & vk4D::Search("http://maps.google.com/maps?q=%s",,"Google Maps (CapsLock+M)")

CapsLock & vk54::Search("https://translate.google.com/#en/ru/%s",,"Перевод с Google Translate (CapsLock+T)")

CapsLock & vk45::Search("www.multitran.ru/c/m.exe?CL=1&s=%s&l1=1",,"Перевод в Multitran-eng (CapsLock+E)")

CapsLock & vk59::
    Search("http://dic.academic.ru/searchall.php?SWord=%s&from=xx&to=ru&did=&stype=0",,"Поиск на Академике (CapsLock+Y)")

CapsLock & vk42::Search("http://flibusta.is/booksearch?ask=%s",,"Флибуста - поиск книг (CapsLock+B)")

CapsLock & vk4C::
    Search("#http://lib.ru/GrepSearch?Search=%s",,"Большой поиск книг (CapsLock+L)")
    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 & vk50::
    Search(,"site:http://forum.ru-board.com","Softodrom, ru-board и Softpedia (CapsLock+P)")
    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 & vk56::
    Search("http://rutracker.org/forum/tracker.php?nm=%s",,"Поиск видео (CapsLock+V)")
    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","Поиск торрентов (CapsLock+R)")
    ;~ 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 & 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, stack:=""
Loop Read, % A_ScriptName
{
    If A_LoopReadLine~="^\s*(/\*|\*/)"
	{
		comment:=!comment
		continue
	}
	If A_LoopReadLine~="^\s*;" || comment
		continue
    ;~ RegExMatch(A_LoopReadLine,"^CapsLock.{2,9}(?=::)",k)
    RegExMatch(A_LoopReadLine,"^\s*\K.+(?=\s*::)",k)
    If k
        key:=k
    RegExMatch(A_LoopReadLine,"(?<=Search\().+(?=\))",s_arg)
    If !s_arg
        continue
    Loop Parse, s_arg, CSV
    {
        If A_LoopField~="s_name"
            continue
        If (A_Index=3 && A_LoopField && key)
        {
            stack.="|" A_LoopField
            n+=1, key%n%:=key, key:=""
        }
    }
}

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

Search(url="",par="",s_name="")
{
    global
    par_start:=par, url_start:=url
    If !url
        url:=def_search 
    If ctrl_delay
        goto gui_start
    If (s_name && !clip)
    {
        ctrl_start:=ctrl_delay:=0
        KeyWait % def_key, T%key_delay%
        If Errorlevel
            ctrl_start:=ctrl_delay:=1
        clipboard_old:=Clipboard, s_numb:=1, s_name_old:=s_name
        WinGetActiveTitle title
        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
        clip:=clip_old
    SetCapsLockState Off
    gui_start:
    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")
    {
        Gui 1:Destroy
        Gui 1:New, -DPIScale, Ctrl+Down - выбор поиска`, Alt+Down - история
        Gui 1:font, s%fs%
        Gui 1:Color, D7D7D7
        Gui 1:Margin , 4, 4
        Gui 1:Add, DropDownList, vSearch w%width% AltSubmit Section,% stack
        GuiControl ChooseString, ComboBox1, % s_name_old
        Gui 1:Add, ComboBox, vclip wp Choose1, % s_stack
        GuiControl Focus, Edit1
        Gui 1:Add, Button, y10 ys w120 r2 Default, OK        
        If (!last_search && open)
            GuiControl Text, Edit1
        Gui 1:Show, Center
        If (ctrl_start && !open)
            Send {End}
        ctrl_start:=ctrl_delay:=open:=""
        KeyWait % def_key, T3
        SetCapsLockState Off
        Exit
    }
    If (s_name && par_start~="\$(url|site)")
    {
        Clipboard:=$url:=$site:=""
        Send ^{vk4C}
        Sleep 200
        Send ^{Ins}
        ClipWait 0.5
        If !Clipboard~="^htt(p|s)://\S+$"
        {
            MsgBox, 262160, Ошибка, Адрес недоступен!, 1
            Exit
        }
        $url:=Trim(Clipboard), Clipboard:=""
        $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}{Enter}
                ;~ SoundBeep 400, 400
                Sleep 500
                goto end
            }
        }
    }
    If def_br
        Run % def_br " " url
    else
        Run % url
    If (s_numb=1)
        WinWaitNotActive % t2, , 5
    Sleep 200
    end:
    s_numb+=1, ctrl_delay:=""
    Clipboard:=clipboard_old, clip_old:=clip, clip:=""
    KeyWait % def_key, T2
    Sleep 100
    SetCapsLockState Off
    return
}

ButtonOK:
Gui 1:Submit
WinActivate title
If (!clip && !par_start~="noclip")
    goto GuiClose
goto % key%Search%

GuiClose:
GuiEscape:
Gui 1:Destroy
clip:=ctrl_delay:=""
return

#If WinActive("ahk_pid " DllCall("GetCurrentProcessId"))
^Down::
ControlFocus ComboBox1
Send !{Down}
return

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

^vk56::
ControlFocus Edit1
Send ^{vk56}
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)
}

40

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

Выгрузил свои скрипты, мучил Capslock, менял его в настройках на Ctrl|^|Shift, менял время зажатия — но не реагирует. Может ещё кто-нибудь отписаться — у всех ли так на Win7?

41

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

Всё-таки, не очень понятно, зачем нужно два варианта (с двумя хоткеями) вывода окна, когда можно по CapsLock+` всегда выводить выделенное или скопированное, а старый поиск по необходимости доставать из выпадающего списка?

42

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

Как можно самостоятельно добавить поиск? Например, по этому сайту?

43 (изменено: DD, 2017-02-13 03:51:57)

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

Будет искать по CapsLock+Q:

CapsLock & vk51::Search(,"site:forum.cgpersia.com","Поиск по forum.cgpersia.com (CapsLock+Q)")

44

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

Почему-то, когда пользуюсь поиском через скрипт, а не вручную, на Гугле требуют заполнять капчу. Заполняю и снова ищу по сайту через Гугл — то же самое. С чего бы это?

45

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

Это гугловские заморочки - иногда и у меня так бывало. Связано это, кажется, с большим числом запросов из-за NAT.  Наконец понял, чего вы хотите - одной клавиши с ручным выбором поиска. Это несложно.
Попробуйте такой скрипт - он точно копирует отработку зажатия CapsLock в скрипте:

CapsLock::CapsLock
CapsLock & 1::
KeyWait CapsLock, T0.8
If ErrorLevel
	MsgBox CapsLock зажат!
else
	MsgBox CapsLock свободен!
return

46

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

Да, так работает, но как уже сказал, я это и сам могу переделать. А хотелось бы решения по поисковым пунктам — чтобы можно было их прописывать, не назначая горячие клавиши, потому что, думаю, юзеры скрипта рано или поздно какие-то пункты захотят оставлять без клавиш и разбить сгруппированные на отдельные. То есть, чтобы к примеру, и с клавишей и без — оба эти пункта отображались:


CapsLock & vk53::Search(,,"Поиск в Интернете (CapsLock+S)")
Search(,"site:$site","Поиск по сайту (CapsLock+D)")

Возможно (но это Вам виднее), при парсинге можно было бы ориентироваться на наличие "return", как разделитель пунктов во всех случаях:


    CapsLock & vk49::
    Search("https://www.mywot.com/ru/scorecard/%s","noclip $site","WHOIS, WOT - информация о сайте (CapsLock+I)")
    Search("https://whois.domaintools.com/%s","noclip $site")
    return

    Search("https://www.mywot.com/ru/scorecard/%s","noclip $site","WHOIS, WOT - информация о сайте")
    Search("https://whois.domaintools.com/%s","noclip $site")
    return

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

47

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

DD пишет:

Будет искать по CapsLock+Q:

CapsLock & vk51::Search(,"site:forum.cgpersia.com","Поиск по forum.cgpersia.com (CapsLock+Q)")

Полагаю, подразумевается поиск Google по сайту? А внутри самого сайта не получится?

48

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

Так кажись:


CapsLock & vk51::Search("https://forum.cgpersia.com/search.php?do=process&do=process&quicksearch=1&childforums=1&exactname=1&s=e8dec4cb2a78920c19b4edcb481f29de&securitytoken=guest&query=%s&forumchoice%5B%5D=-1&titleonly=1&search=Search",,"Поиск по forum.cgpersia.com (CapsLock+Q)")

49

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

DD, спасибо! А как Вы определили ссылку? У меня не получилось это сделать самостоятельно. Могли бы сделать скриншот?

50

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

becauseim, пожалуйста! Достал из этого окна на скриншоте в старой Опере (v12.14), по пункту из контекстного меню «Создать поиск», вызванного из поисковой формы сайта. Только для скрипта я объединил "Адрес" с "Запросом", добавив между ними знак &

http://i91.fastpic.ru/thumb/2017/0214/c8/8d7237e632dfe60591b787ec48db7cc8.jpeg

51

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

DD, спасибо! Ранее я использовал подобный функционал в Chrome, однако сейчас, как мне кажется, эту функцию упразднили. Оказывается, в других браузерах она еще есть. Конечно, хотелось бы узнать, как это можно сделать, используя Chrome.

52

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

Скрипт обновлен. Сейчас возможно использование вместо горячих клавиш произвольных меток, например цифровых. Сочетание "CapsLock + `" копирует текст и помещает его в окно с последним использованным поиском. Скопированные имена файлов всегда подсвечиваются, чтобы было просто их при необходимости удалять при случайном копировании.
Отработка зажимания CapsLock изменена. Вместо KeyWait используется цикл с GetKeyState() - что может быть надежнее мне не известно. Несколько исправлений и улучшений.

becauseim
В Vivaldi такой функционал есть, это хромоклон и в общем-то на подъеме.

+ DD

53

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

Круто, спасибо! Заметил, что текст из буфера, по выводу окна, заменяется на выделенный. То есть, если скопировать что-нибудь, а потом выделить непохожий текст и вызвать окно скрипта — в буфер попадает выделенное. Может доставлять неудобства.

54

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

О, напомнили! Сам сейчас в основном на фоксе, года 2 назад, когда перелезал  с оперы очень не хватало ее поисковых фишек. Чтобы было понятно, о чем я, скриншот той части моих тогдашних поисковиков, которые уместились на экране:

+ Presto

Presto

Обратите внимание на такие мегафичи, как поиск по сайту и по истории браузера.
Тогда раздумывал не написать ли свой скрипт для поиска. Остановило то, что 30% поисковиков используют POST, а передать его из ком.строки невозможно. Хотя мне сейчас пришла интересная мысль - можно ведь написать расширение для браузера, которое будет обрабатывать переданный ему запрос и делать POST.

0xFFFFFF
0xFF0000
0xFFFFFF

55 (изменено: DD, 2017-02-14 23:37:52)

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

stealzy
Ну, у меня списочек был поболее (150 пунктов)). А насчёт POST, посмотрите на предыдущей странице, там как раз пример объединения адреса и POST-запроса знаком & (иногда ?) — что, видимо, должно работать во всех случаях.

56

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

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

57 (изменено: stealzy, 2017-02-15 00:03:18)

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

Сформулировать просто - взятие POST запроса. Поищите плагины для добавления поисковиков (search engine) к своему браузеру. Возможно вам повезет и плагин даст увидеть тело POST. Я для фокса не нашел.
Забавно, что у лисы ща тоже есть встроенный ф-ал добавления кастомных поисков. Но при добавлении даже GET вы не увидите, плюс сохраняет она их в файле в бинарном виде.
Presto устанавливать не надо - официальный интсаллер предлагает распаковаться портативно.

0xFFFFFF
0xFF0000
0xFFFFFF

58 (изменено: Krot66, 2017-02-15 18:37:01)

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

Я в post-запросах не волоку - вне браузера они невозможны (?). Да в принципе меня они особо и не интересуют: сверхдостаточно внешних поисковиков, шарящих по сайту. Гуугл хорош, если сайт "с проблемами" - можно взять альтернативные.
DD
Так и не понял, работает ли зажатие CapsLock? И что значит

DD пишет:

Заметил, что текст из буфера, по выводу окна, заменяется на выделенный. То есть, если скопировать что-нибудь, а потом выделить непохожий текст и вызвать окно скрипта — в буфер попадает выделенное. Может доставлять неудобства.

Добавлено:
Можно сделать так, что CapsLock + ` будут помещать выделенный текст в подсвеченном виде виде, откуда он будет убираться даже по Ctrl+V.

59

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

Krot66, добавьте точки в этом и в том сообщении.

60

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

Добавлено.

61 (изменено: DD, 2017-02-15 19:50:13)

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

stealzy
Кстати на счёт написания скрипта — зачем его писать, если вот он готовый есть?

Krot66
CapsLock не работал (не знаю: у меня ли одного?), тем не менее, сам не вижу в ней необходимости, потому все можно делать через CapsLock+` — скопированный текст без параллельно имеющегося выделения помещая в окно, либо помещая в окно выделенный текст, без параллельно имеющегося буферного. А если одновременно что-то скопировано и выделено — делая приоритет для скопированного. А выше имел в виду, что если к примеру в буфере будет слово "CapsLock", а потом мы выделим слово "script" и вызовем окно по CapsLock+`, то слово "script" в окно попадёт, но слово "CapsLock" из буфера потеряется и заменится на слово "script")). То есть, там нужна настройка сохранения предыдущего содержимого буфера.

OFF:
ypppu по всему сайту всерьёз взялся за искоренение фраз без точек)). Раньше проходило незамеченным)).

62

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

OFF:
Минимальная планка грамотности существовала и раньше. Но сейчас предприимчивые модераторы стали строже следить за её соблюдением.

63

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

На самом деле, очень странно, что так активно искоренняются посты без точек в конце последнего предложения, когда общие ошибки правописания зачастую остаются незамеченными.

64

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

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

ON: На этом дискуссия закончена. Если хотите продолжить - то в разделе Script-Coding.com community.

65

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

Скрипт обновлен. Если переменная def_key в настройках пуста, после нажатия горячих клавиш будет всегда открываться окно с выбранным поиском и скопированным текстом. Т.е. можно пользоваться клавишами для вызова интерфейса с интересующим поиском вне зависимости от их зажатия. В настройках можно задать подсветку скопированного текста постоянно, только если скопирован полный путь или никогда. Текстовый буфер всегда восстанавливается к исходному состоянию, в т.ч. и при вызове интерфейса. Исправлено несколько ошибок.

+ DD

66 (изменено: DD, 2017-02-26 02:00:25)

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

Интересно, можно ли выпадающий список с поисками по горячей клавише сразу активировать на определенной поисковой строке (с переходом в списке), ориентируясь на начальные символы и не раскрывая списка? Возможно, посылая какое-то сообщение?

То есть, к примеру, в DropDownList с десятками поисков и полосой прокрутки, где-нибудь внизу есть группа с названиями:


VIDEO: YouTube
VIDEO: ClipConverter.cc
и т. д.

И по клавише CapsLock + V — вызывается окно и эта группа активируется в строке "Выбора поиска", так что при раскрытии поисков из выпадающего списка, не придется прокручивать и искать нужную группу.

Интересует сама возможность перехода в списке без раскрытия.

67

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

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

68 (изменено: DD, 2017-02-27 00:06:55)

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

Krot66, имелось в виду, что список (выпадающий по Ctrl+Down) может быть довольно велик и тогда в нём нужный блок надо будет искать, прокручивая его. А мне показалось, что лучше все поиски разбить по типам/группам

IMG: Images.Yandex.ru
IMG: TinEye (URL)
IMG: VK: Похожие фото (photo123_123)
IMG: VK: Поиск ф
PPL: Поиск людей в VK.COM
PPL: Поиск людей в FACEBOOK
PPL: People Search: данные о людях - никнейм, телефон, почта, ключевые слова
PPL: Spravkaru.net - АдресДомТел
ARH: Google: кэш, ссылающиеся и связанные страницы
ARH: Архив Веба (URL)

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

То есть, например, ищем что-то связанное с изображениями — жмём сочетание "CapsLock + I" — вызывается окно и в нём становится активен первый поиск из группы "IMG" — "IMG: Images.Yandex.ru", так что после, если список развернуть — всё остальное сразу на виду. Или ищем что-то связанное с пипл — жмём сочетание "CapsLock + P" и т.д.
По-моему, было бы удобно, потому что списки неизбежно будут и должны расти))

69 (изменено: Krot66, 2017-03-01 17:51:15)

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

Скрипт обновлен. Добавлена опция сортировки поисков по названиям. Кроме того, для сортировки в начале названий поисковиков можно добавлять цифры - они не будут отображаться в окне.
В окне поиска выпадающий список поисков заменен на ListView с автоматически формирующейся колонкой горячих клавиш. Можно запускать поиск двойным щелчком по выбранному поиску. Выглядит это сейчас так:

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

Изменены горячие клавиши. Множество мелких улучшений. В описание добавлено определение url поиска в Опере 12.

70 (изменено: DD, 2017-03-03 21:01:29)

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

Мощно, спасибо! С выводом развернутого окна с наглядным списком — вообще гениально)).
Заметил особенность: если выделить текст и нажать горячую клавишу для поисковых групп — с браузером запустится первый поисковик из группы, а если не выделять текст — запустится окно скрипта с выделенной первой строкой для поисковой группы.
Если так не было задумано, возможно ли, чтобы результатом нажатия хоткеев был всегда запуск окна скрипта, с выделенной первой строкой группы (ближайшей к нажатому хоткею)? А кроме того, чтобы после запуска окна — выделенный в списке поиск (по горячей клавише) оказывался на верху списка (если позволяет величина списка), с тем чтобы сразу становились видны следующие строки? Возможно, посылая PageDown?

71

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

Сейчас видны следующие поисковики. Немного улучшена работа с недефолтными браузерами.
Никакой привязки клавиш к группе нет. Чтобы всегда показывалось окно с выбранным по клавише поиском достаточно сделать пустой переменную def_key  в настройках.
Я спрашивал: у вас что-нибудь вышло с передачей постзапросов в браузер, хотя бы отдельно взятый? Можете привести примеры?

+ DD

72 (изменено: DD, 2017-03-04 03:48:19)

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

Спасибо! А с пост-запросами проблем, вроде, не было. Например, поиск на nnm-club.me и на Рутрекере:


http://rutracker.org/forum/tracker.php?f%5B%5D=%2D1&o=7&s=1&oop=0&df=1&da=1&ds=0&nm=%s
http://nnm-club.me/forum/tracker.php?f=-1&nm=%s

Адреса с пост-запросами в которых объединил, добавив ? (поскольку в адресах


http://rutracker.org/forum/tracker.php
http://nnm-club.me/forum/tracker.php

? не было; иначе надо было бы добавлять &).

73

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

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

74

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

Я вообще не пользовался функцией "Подписаться на тему". Скорее всего уведомление приходит, когда кто-то отредактировал сообщение.

75

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

Krot66
Нажмите "Отписаться", потом снова "Подписаться". Должно помочь.

76 (изменено: DD, 2017-03-11 17:39:18)

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

Если бы можно было поменять CapsLock на F1, сохранив умолчальный функционал F1 — как бы это выглядело, если не сложно? И ещё пока пользовался, возникло пожелание в опции "on-top" — чтобы окно после запуска поиска не закрывалось, оставаясь поверх всех окон — потому что иногда бывает надо что-то последовательно искать. Может добавить — в виде возможности ставить/снимать галку в окне?

77

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

CapsLock на F1 можно поменять обычным образом, поменяв сами клавиши, прописав def_key:="F1" и заменив строку CapsLock::CapsLock на F1::F1.

+ DD

78

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

Добавил опцию поверх всех окон. Чекбокс делать не стал - скорее по соображениям эстетики. Можно переключать режим поверх всех окон щелчком средней кнопки мыши. Набранный текст при этом теряется, но, думаю, это не страшно.
Сделаны кнопки выбора поиска PgUp, PgDn, Home и End.