Как я могу использовать Autohotkey, чтобы сосредоточиться на существующей вкладке Google Chrome, а не на окне" контейнер"?

Как я могу использовать Autohotkey, чтобы сосредоточиться на существующей вкладке Google Chrome, а не на окне" контейнер"?

подробности

Google Chrome, похоже, представляет каждое окно с дескриптором окна контейнера, который содержит одну или несколько вкладок. Вкладки (по крайней мере, текущая), имеет свой собственный дескриптор окна. Дескрипторы окон вкладок имеют заголовки окон (которые в настоящее время заканчиваются на "- Google Chrome"), тогда как сами окна контейнера этого не делают. Следующий код autohotkey не работает так, как предназначен для Google Chrome:

^+i::
if WinExist("ahk_class Chrome_WidgetWin_0")
    WinActivate
else
    Run "C:UsersvleeshueAppDataLocalGoogleChromeApplicationchrome.exe"
return

эта привязка будет сосредоточена на окне Google Chrome, если оно существует или будет работать Google Chrome. Тем не менее, он часто нацеливается на окно контейнера (в Window Spy заголовок окна пуст). Активация окна контейнера запрещает использование сочетаний клавиш Google Chrome. Недоступные сочетания клавиш включают все важные ctrl+l для доступа к omnibar. Так как я еще не нашел способ последовательно активируйте окно вкладки вместо окна контейнера, мой обходной путь должен использовать мышь, но я предпочел бы избежать этого, если это возможно.

Окно Шпиона Скриншоты

Container Window Handle

Tab Window Handle

фон

текущая версия Google Chrome: 5.0.317.2 dev

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

например, я использую это для foobar2000

^+m::
If WinExist("foobar2000")
    WinActivate
else
    Run "C:Program Files (x86)foobar2000foobar2000.exe"
return
10
задан 3498DB
04.02.2023 0:51 Количество просмотров материала 3417
Распечатать страницу

9 ответов

^+i::
if WinExist("ahk_class Chrome_WindowImpl_0")
  {
  WinActivate
  ControlFocus, Chrome_AutocompleteEditView1
  }
else
  Run "C:\Users\vleeshue\AppData\Local\Google\Chrome\Application\chrome.exe"
return

должен сделать трюк

("Chrome_AutocompleteEditView1" - это имя элемента управления omnibar, поэтому вы можете добавить Send ^a выбрать все)

Примечание: для получения ahk_class для вашей версии Chrome, например,ahk_class Chrome_WindowImp1-0 используйте AU3_Spy.exe внутри каталога autohotkey. Это позволит вам найти правильный класс ahk для Вашего браузера chrome, Если пример не работает.

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

#Persistent
SetTimer, WatchCursor, 100
return

WatchCursor:
  MouseGetPos, , , id, control
  WinGetTitle, title, ahk_id %id%
  WinGetClass, class, ahk_id %id%
  WinGet, ControlList, ControlList, A
  ToolTip, Under Cursor:`nahk_id: %id%`nahk_class: %class%`nTitle:%title%`nControl: %control%`n`nWindow Control List:`n%ControlList%
return

так что элементы управления моего Google chrome 4.0.249.78 beta (36714):

  • ViewsTextfieldEdit1
  • Chrome_RenderWidgetHostWND1
  • Chrome_AutocompleteEditView1
  • Chrome_WindowImpl_01
  • Chrome_WindowImpl_02
5
отвечен fluxtendu 2023-02-05 08:39

обходной путь с помощью Alt + Tab:

; Activates the window identified with wintitle if it's active,
; else opens a new one
OpenWindow(wintitle, runCommand)
{
    if WinExist(wintitle)
        WinActivate ; activates the window found above. Sweet.
    else
        Run %runCommand%
}

#g::
AppsKey & g::
    prevKeyDelay := A_KeyDelay
    SetKeyDelay, 100
    OpenWindow("ahk_class Chrome_WidgetWin_0", A_AppData
                . "\Local\Google\Chrome\Application\chrome.exe")
    SendEvent {Alt down}{Tab}
    SendEvent +{Tab}
    SendEvent {Alt up}
    SetKeyDelay, prevKeyDelay
return

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

3
отвечен ftvs 2023-02-05 10:56

вы можете посмотреть на использование расширения Chrome Вместо AutoHotkey. Расширения могут получить доступ ко всем открытым вкладкам, включая URL и способность изменить фокус. В противном случае вам, вероятно, придется использовать доступность функции в Chrome для запроса активного окна. Я считаю, что именно так программы, такие как RescueTime, отслеживают, что такое активный URL. Например, использование наблюдателя событий (AccEvent) из пакета SDK для Windows 7 показывает следующие события при смене вкладок в Chrome:

Google Chrome AccEvent

3
отвечен Greg Bray 2023-02-05 13:13

Если вы хотите найти вкладку chrome, вы можете использовать это

SetTitleMatchMode, 2
If WinExist("your title ahk_exe chrome.exe")

     .... do your stuff ... 

else {
     .... do your other stuff ...
}

return

так как в хроме все это процесс, ваши вкладки и процессов.

1
отвечен acteon 2023-02-05 15:30

window Spy возвращает заголовок вкладки в поле "видимый текст окна".

вы могли бы цикл на вкладках, пока не найдете нужный текст. Чтобы переключиться с вкладки на вкладку, отправьте CTRL+TAB ключи. Проблема в том, чтобы остановиться в какой-то момент, но если вы знаете, что не используете более X вкладок максимум, вы можете включить счетчик в цикл, чтобы сломаться в какой-то момент, если нужная вкладка не найдена.

0
отвечен Snark 2023-02-05 17:47

там, кажется, ошибка с функцией WinActivate в AutoHotkey. (http://productivegeek.com/forums/topic/autohotkey-problem-restoring-minimized-window-and-giving-keyboard-focus)

поэтому вместо строки WinActivate используйте

WinGet, winid, ID, 
DllCall("SwitchToThisWindow", "UInt", winid, "UInt", 1)
0
отвечен polyglot 2023-02-05 20:04
!f::
    IfWinExist ahk_class Chrome_WidgetWin_0
    {   IfWinActive ahk_class Chrome_WidgetWin_0
        {   Loop, 60
            {   GetKeyState, state, C
                if state = D
                {   KeyWait, c

                    KeyWait, LAlt
                    Sleep 10

                    ;must send RCtrl!!!
                    Send {RCtrl down}
                    Send {w down}
                    Sleep 10
                    Send {w up}
                    Send {RCtrl up}

                    break
                }
                Sleep 1
            }

        }

        else
        {   KeyWait,f
            KeyWait,LAlt
            ;don't hijack other apps
            Send f
        }
    }

    return
0
отвечен Jackson 2023-02-05 22:21

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

!z::
WinWait, Yahoo,
IfWinNotActive, Yahoo, , WinActivate,Yahoo,
WinWaitActive, Yahoo, 
Sleep, 100
return
0
отвечен test 2023-02-06 00:38

эта функция AHK активирует вкладку Google Chrome, если она существует, и возвращает true. В противном случае он вернет false.

; Activates tab in Google Chrome if it exists
; Returns true if exists, false if does not exist
; Leaves original tab activated if sought tab does not exist
; Known issue: will stop searching tabs if two tabs have same name
ActivateChromeTab(soughtTab)
{
  SetTitleMatchMode 2 ; Allows for partial matches in window titles

  IfWinNotExist Google Chrome
  {
    return false
  }

  WinActivate Google Chrome
  WinWaitActive Google Chrome
  WinGetTitle, currentTab, A
  firstTab := currentTab

  if (InStr(currentTab, soughtTab) > 0)
  {
    return true
  }

  Loop
  {
    Send {CtrlDown}{Tab}{CtrlUp}
    Sleep 50 ; Requires some time to update the window titles
    WinGetTitle, currentTab, A
    foundTab := InStr(currentTab, soughtTab) > 0
  }
  Until (foundTab || currentTab == firstTab)

  return foundTab
}
0
отвечен HaveSpacesuit 2023-02-06 02:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх