1

Тема: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Доброго времени суток, дамы и господа!
Столкнулся тут с проблемой. Написал я небольшой скрипт, который осуществляет ряд манипуляций на конкретной странице сайта. Все вроде нормально работает. Но захотелось мне, чтобы переход по ссылке осуществлялся не кликом по ней, а прямо задав адрес в скрипте. Переходить то переходит, но... открывается ссылка в новой вкладке. Покопался я тут на форуме и в поиске, но так и не смог найти нигде.
Как в AHK осуществить переход по ссылке, чтобы она открывалась в текущей вкладке?

2

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

В хроме, думаю, никак. Переходи на мозиллу.

3

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Malcev пишет:

В хроме, думаю, никак. Переходи на мозиллу.

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

4

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

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

5

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

У меня так вышло:

OpenUrlInCurrentTabChrome("http://forum.script-coding.com/")

OpenUrlInCurrentTabChrome(url)
{
   if !hWnd := WinExist("ahk_class Chrome_WidgetWin_1")
   {
      Run, Chrome.exe %url%
      Return
   }
   
   WinActivate
   GetAccAddrChrome(AccObjectFromWindow(hWnd)).accValue(0) := url
   ControlSend,, ^{vk4C}   ; Ctrl + L
   Sleep, 100
   ControlSend,, {Enter}
}

GetAccAddrChrome(AccObj)
{
   if AccObj.accName(0) = "Адресная строка и строка поиска"
      Return AccObj
   
   for k, v in AccChildren(AccObj)
      if (o := GetAccAddrChrome(v))
         Return o
}

AccInit()
{
   static h
   !h ? h := DllCall("LoadLibrary","Str","oleacc","Ptr")
}

AccObjectFromWindow(hWnd, idObject = -4)
{
   AccInit()
   If   DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject&=0xFFFFFFFF
      , "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81
      , NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0
   Return   ComObjEnwrap(9,pacc,1)
}

AccChildren(Acc)
{
   cChildren:=Acc.accChildCount, Children:=[]
   if DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0, "Int", cChildren
      , "Ptr", VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*", cChildren)=0 {
      Loop %cChildren%
         i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i)
            , Children.Insert(NumGet(varChildren,i-8)=3?child:AccQuery(child)), ObjRelease(child)
      return Children
   }
   error:=Exception("",-1)
   MsgBox, 262420, AccChildren Failed, % "File:  " error.file "`nLine: " error.line "`n`nContinue Script?"
   IfMsgBox, No
      ExitApp
}

AccChild(Acc, ChildId=0)
{
   try child:=Acc.accChild(ChildId)
   return child?AccQuery(child):
}

AccQuery(Acc)
{
   try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Я заменил

if AccObj.accName(0) = "Адресная строка и строка поиска"

на

if AccObj.accName(0) = "Address and search bar"

Но открывается у меня следующая ссылка.

http://forum.script-coding.com/l

7

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Проверь, как работают в Хроме шорткаты Ctrl + L и Alt + D. Должна выделяться адресная строка. Можно заменить

ControlSend,, ^{vk4C}   ; Ctrl + L

на

ControlSend,, !{vk44}   ; Alt + D
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

А сейчас вроде все работает.
Может надежней посылать с помощью SendInput?

9

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Не знаю, экспериментировать нужно. Не вижу повода думать, что SendInput будет надёжней. Для надёжности можно после WinActivate ещё Sleep, 100 вставить.

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

10

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Ну или ещё так можно:

OpenUrlInCurrentTabChrome("http://forum.script-coding.com/")

OpenUrlInCurrentTabChrome(url)
{
   if !hWnd := WinExist("ahk_class Chrome_WidgetWin_1")
   {
      Run, Chrome.exe %url%
      Return
   }
   
   WinActivate
   Sleep, 100
   ControlSend,, !{vk44}   ; Ctrl + L
   Sleep, 100
   ControlSendRaw,, % url
   ControlSend,, {Enter}
}

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

11 (изменено: vospa, 2014-10-31 17:19:26)

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

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

   for k, v in AccChildren(AccObj)

Второй скрипт работает, спасибо. Правда для стабильной его работы пришлось увеличить задержку до секунды. Из всего этого я понял только то, что обычной командой не открыть ссылку в той же закладке, поэтому приходится вбивать ее в адресную строку.
И еще несколько вопросов. Если работает второй скрипт, для чего в первом еще столько строк? Во втором скрипте абсолютно не понимаю первые 2 строки. Что это за команды? Вроде в списке команд АНК их же нет. Ну и собственно главный вопрос. Раз нам приходится все равно вбивать ссылку в адресную строку, то почему не хочет работать просто вот такой код?

   WinActivate, заголовок окна
   Sleep, 100
   ControlSend,, !{vk44}   ; Ctrl + L
   Sleep, 100
   ControlSendRaw,, адрес ссылки
   ControlSend,, {Enter}

Хмм... зато у меня все заработало вот так

   WinActivate, Яндекс - Google Chrome
   Sleep, 100
   SendInput, !{vk44}
   Sleep, 100
   SendInput, http://forum.script-coding.com/
   Sleep, 100
   SendInput, {Enter}

12

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

vospa пишет:

Первый скрипт у меня вообще не запустился.

Обновите AHK.

vospa пишет:

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

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

vospa пишет:

почему не хочет работать просто вот такой код

Команды ControlSendRaw и ControlSend должны быть адресованы конкретному окну. В моём случае это Last Found Window, определённое ранее после выполнения функции WinExist(), в вашем — пусто. Т. е. попросту нужно указать в них параметр WinTitle. Его же нужно указать в команде

WinActivate, заголовок окна

вместо слов "заголовок окна".
Команда же SendInput посылает клавиши активному окну.

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

13 (изменено: Malcev, 2014-10-31 18:16:55)

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

У меня в этом примере ControlSend глючит.

OpenUrlInCurrentTabChrome("http://forum.script-coding.com/")

OpenUrlInCurrentTabChrome(url)
{
   if !hWnd := WinExist("ahk_class Chrome_WidgetWin_1")
   {
      Run, Chrome.exe %url%
      Return
   }
   
   WinActivate
   Sleep, 100
   ControlSend,, !{vk44}   ; Ctrl + L
   Sleep, 100
   ControlSendRaw,, % url
   ControlSend,, {Enter}
}

Использовать его в данном случае  не вижу необходимости.
А вообще зачем придумывать костыли?
Что за флеш такой, который Мозилла не воспроизводит?

14

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Malcev пишет:

Использовать его в данном случае  не вижу необходимости.

Не совсем понял, кого "его" и в каком именно случае. Если SendInput работает лучше, конечно надо использовать её. Просто вроде считается, что ControlSend обычно надёжнее.

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

15

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Его, в смысле ControlSend. А в случае, если SendInput устраивает.

16

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Сделайте под мозиллу пожалуйста! Очень прошу.

17

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Sacrifice_ts, легко, но только с активацией окна:

link := "http://forum.script-coding.com/"
WinExist("ahk_class MozillaWindowClass ahk_exe firefox.exe")
WinActivate
SendInput, ^{sc26}   ; Ctrl + L
SendInput, {Raw}%link%
SendInput, {Enter}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

teadrinker господи дай бог тебе здоровья

19

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Ещё легче!

browser = ваша ссылка
run %browser%

20

Re: AHK: Переход по ссылке в Google Chrom в текущей вкладке

Codermix228333, добро пожаловать на форум! Не имеет смысла поднимать посты многолетней давности. Тем более, что вы задачу не поняли.

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