Снова приветствую всех участников форума!
Прошел год, а тема использования различных поисковиков по-прежнему актуальна для меня.
Код, инспирированный Malcev, разработанный teadrinker и доведенный до совершенства __Михаил__, по-прежнему работает, хотя, каюсь, стал реже им пользоваться: Грамота пережила удачную модернизацию своего сайта и сейчас практически вне конкуренции как ресурс по проверке орфографии. Как бы там ни было, никто не забыт и ничто не забыто, я по-прежнему преисполнен благодарностью за него!
По иронии судьбы именно с сайтом Грамоты связан мой нынешний запрос.
F1::
{
Send, ^c
Sleep 50
Run, https://gramota.ru/poisk?query=%clipboard%&mode=all
Return
}
Данный код по-прежнему выполняет свою функцию, но создает новую вкладку всякий раз, когда осуществляется поиск с его помощью, и, конечно, это не очень удобно, когда приходится удалять десятки таких вкладок по несколько раз за день. Год промаялся с этим, сейчас вот дошли руки оптимизировать. Собственно, основной алгоритм был предложен teadrinker в посте № 4 данной темы, я лишь придумал его значительно упростить, так сказать, до своего уровня, так что в схематичном виде на данном этапе он выглядит так:
1. По нажатию клавиши скопировать в буфер обмена предварительно выделенное где-либо слово/словосочетание;
2. Активировать браузер, если он свернут или не запущен вовсе;
3. Выбрать заранее закрепленную в окне браузера вкладку Грамоты;
4. Сделать фокус в поле ввода поисковика Грамоты;
5. Потереть предыдущий поиск, если он был;
6. Вставить слово/словосочетание из буфера обмена;
7. Произвести новый поиск.
В попытке реализации этого алгоритма у меня получился вот такой скрипт:
SetMouseDelay, 0
SetControlDelay, 0
F1::
{
SendInput ^c
Sleep 50
WinActivate ahk_exe msedge.exe
Click 415, 25 ; координаты закрепленной вкладки Грамоты
ControlFocus, Intermediate D3D Window1, ahk_class Chrome_WidgetWin_1
SendInput <^{Backspace 10} ; не придумал, как проще чистить слова предыдущих поисков
SendInput ^v
SendInput {Enter}
return
}
И... он не срабатывает. Вернее, он срабатывает однократно буквально, а потом доходит до активации нужной вкладки и стопорится. Забавно, что если в этот же скрипт подсунуть координаты вкладки с поисковиком Яндекса, он функционирует безо всяких проблем (у обоих сайтов элементы управления, поля ввода, имеют одинаковые ClassNN, а именно Intermediate D3D Window1, ну и запуск происходит в одном браузере).
Попробовал использовать HWND вместо ClassNN (не очень понимая, в чем разница, конечно): получил 0x1040c, подставил в эту же кодовую строку – ничего не изменилось, ответа нет. Стал смотреть всякие обходные пути, изучать команды типа ControlSend, ControlSetText, но в них разобраться не удалось даже при наличии русскоязычных инструкций. Поскольку я более-менее освоил Click, удалось реализовать поиск в Грамоте отправкой серии мышиных кликов, но это костыльный вариант, который не очень устраивает. (Могу показать сей шедевр извращенческой мысли, но попридержу пока.) В частности, при использовании получившегося кликающего скрипта сайт Грамоты периодически выдает мне ошибку 503 Service Temporarily Unavailable (хотя такое, возможно, связано с частым тестированием сайта данным скриптом), по понятным причинам отказывается работать в полноэкранном режиме (клики подгонялись под сплитскрин-режим, наиболее часто мною используемый), ну и еще там более мелкие косяки возникают (иногда приходится дважды прожимать релизную кнопку скрипта, чтобы слово наконец отправилось в поле ввода). Одним словом, не самый удобный вариант, хотя, вероятно, и его можно довести до ума.
Есть ли возможность относительно просто решить возникшее затруднение все-таки с помощью чего-то похожего на ControlFocus? Простота требуется, во-первых, потому, что мне хотелось бы взять простое решение на заметку (пытаюсь учиться все-таки) и затем попытаться инкрустировать его в другие свои скриптики, а во-вторых, все-таки не настолько это критичный момент, чтобы сильно запариваться с ним. Заранее благодарю всех откликнувшихся!
Если что, как и прежде, использую АХК версии 1.1.33.11 на ноутбуке на Вин10.
Надеюсь, правильно сделал, что не стал создавать новую тему, а запостил все измышлизмы в старой.