자동 컨테이너를 사용하여 '컨테이너'창이 아닌 기존 Chrome 탭에 집중할 수 있습니까?


16

자동 컨테이너를 사용하여 "컨테이너"창이 아닌 기존 Chrome 탭에 집중하려면 어떻게해야합니까?

세부

Chrome은 하나 이상의 탭을 포함하는 컨테이너 창 핸들로 각 창을 나타내는 것으로 보입니다. 탭 (적어도 현재 탭)에는 자체 창 핸들이 있습니다. 탭 창 핸들에는 창 제목 (현재는 모두 "-Chrome"으로 끝남)이 있지만 컨테이너 창 핸들 자체는 그렇지 않습니다. 다음 자동 단축 키 코드는 Chrome 용으로 작동하지 않습니다.

^+i::
if WinExist("ahk_class Chrome_WidgetWin_0")
    WinActivate
else
    Run "C:\Users\vleeshue\AppData\Local\Google\Chrome\Application\chrome.exe"
return

이 바인딩은 존재하거나 Google 크롬을 실행하는 경우 Chrome 창에 초점을 맞 춥니 다. 그러나 종종 컨테이너 창을 대상으로합니다 (Window Spy에서는 창 제목이 비어 있음). 컨테이너 창을 활성화하면 Chrome 키보드 단축키를 사용할 수 없습니다. 액세스 할 수없는 키보드 단축키에는 검색 주소창에 액세스하기위한 모든 중요한 ctrl + l이 포함되어 있습니다. 컨테이너 창 대신 탭 창을 일관되게 활성화하는 방법을 아직 찾지 못했기 때문에 해결 방법은 마우스를 사용하는 것이지만 가능하면 피하는 것이 좋습니다.

창 스파이 Screenshots

컨테이너 창 핸들

탭 창 핸들

배경

현재 Google Chrome 버전 : 5.0.317.2 dev

내가 사용하는 일반적인 자동 핫키 바인딩은 특정 응용 프로그램이 이미 실행중인 경우 초점을 맞추거나 실행되지 않는 경우 응용 프로그램을 실행하는 키보드 단축키입니다.

예를 들어, 나는 이것을 foobar2000에 사용합니다.

^+m::
If WinExist("foobar2000")
    WinActivate
else
    Run "C:\Program Files (x86)\foobar2000\foobar2000.exe"
return

답변:


5
^+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"은 검색 주소창 컨트롤의 이름이므로 Send ^a모두 선택하여 추가 할 수 있습니다 )

참고 : 를 얻기 위해 ahk_class예를 들어 크롬의 버전에, ahk_class Chrome_WindowImp1-0의를 사용 AU3_Spy.exeAutoHotkey에 디렉토리 내부. 예제가 작동하지 않으면 크롬 브라우저에 적합한 ahk 클래스를 찾을 수 있습니다.

업데이트 : 재현 할 수 없습니다. 아마 다른 컨트롤로 더 나을 것입니다 ... 창 컨트롤 목록을 얻으려면이 코드를 사용하십시오.

#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

내 구글 크롬 4.0.249.78 베타 (36714)의 컨트롤은 다음과 같습니다

  • ViewsTextfieldEdit1
  • Chrome_RenderWidgetHostWND1
  • Chrome_AutocompleteEditView1
  • Chrome_WindowImpl_01
  • Chrome_WindowImpl_02

대단히 감사합니다. 이것은 이전 기능보다 훨씬 더 자주 작동하는 것 같습니다 (ahk_class Chrome_WindowImpl_0을 ahk_class Chrome_WidgetWin_0으로 변경해야했지만 다른 버전의 Chrome으로 인한 것일 수 있습니다). 불행히도 여전히 시간이 흐르지 않으며 그 경우를 재현하기가 어렵습니다. 컨테이너 창에 고정되면 (질문 포스트의 스크린 샷 참조) 여전히 마우스를 사용해야합니다.
vleeshue

Chrome 컨트롤 목록을 어떻게 얻습니까? 이것을 조금 사용한 후에는 "콘텐츠"창에 집중하는 것을 선호합니다. 예를 들어 활성 탭이 Google 리더 또는 Gmail 인 경우 키보드 단축키에 액세스하고 싶습니다.이 단축키는 "콘텐츠"창에 초점을 맞출 때만 적용됩니다. 또한 "콘텐츠"창에 초점을 맞추면 페이지 검색 속도가 빨라집니다. 또한 "content"창에서 검색 주소창으로 이동하려면 항상 ctrl + l을 사용할 수 있습니다.
vleeshue

1
예, 다른 컨트롤로 더 나을 수 있습니다. 내 업데이트 참조
fluxtendu

흠 ... 나는 얻는다 : Chrome_WidgetWin_01, Chrome_WidgetWin_02, Chrome_RenderWidgetHostHWND1, ViewsTextfieldEdit1, Chrome_AutocompleteEditView1. 내가 원하는 컨트롤을 추론 할 시간입니다. 감사! 업데이트 1 : 몇 가지 빠른 테스트 결과 Chrome_WidgetWin_01이 원하는 것을 수행합니다. 내 생각 엔 추가 내용이 페이지 내용에 따라 생성됩니다. 업데이트 2 : Google 리더 탭에는이 슈퍼 유저 편집 탭보다 적어도 하나 이상의 제어 기능이 있습니다.
vleeshue

불행히도, "컨테이너"창으로 다시 돌아가고 (창 스파이의 빈 창 제목) 허용 된 응답 태그를 실행 취소해야했습니다. 그래도 큰 도움이되었습니다.
vleeshue

3

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

AutoHotkey 대신 Chrome 확장 프로그램을 사용하는 것이 좋습니다. 확장 프로그램은 URL 및 탭 포커스 변경 기능을 포함하여 열려있는 모든 탭에 액세스 할 수 있습니다 . 그렇지 않으면 아마도 활성 창을 쿼리하기 위해 Chrome 의 접근성 기능 을 사용해야 할 것입니다 . RescueTime과 같은 프로그램이 활성 URL을 추적하는 방식이라고 생각합니다. 예를 들어 Windows 7 SDK의 AccEvent (액세스 가능한 이벤트 감시자)를 사용하면 Chrome에서 탭을 변경할 때 다음과 같은 이벤트가 표시됩니다.

Chrome AccEvent


나는 이것에 대해 몰랐다. 고마워요
vleeshue

AutoHotkey가 iAccessible 인터페이스 작업을 지원하는 것 같습니다. 도움이된다면이 시도하고 참조 할 수 있습니다 : autohotkey.com/forum/viewtopic.php?t=48629
그렉 브레이

1

크롬 탭을 찾으려면 이것을 사용할 수 있습니다

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

     .... do your stuff ... 

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

return

크롬에서는 모든 것이 프로세스이므로 탭도 프로세스입니다.


0

Window Spy는 "Visible Window Text"필드에 탭 제목을 반환합니다.

원하는 텍스트를 찾을 때까지 탭을 반복 할 수 있습니다. 탭에서 탭으로 전환하려면 CTRL+ TAB키를 보내십시오 . 문제는 어느 시점에서 멈추는 것이지만 X 탭을 많이 사용하지 않는 것을 알고 있다면 원하는 탭을 찾을 수없는 경우 루프에 카운터를 포함시켜 특정 시점에서 중단 할 수 있습니다.


불행히도 ctrl + tab에도 액세스 할 수 없습니다. 다음은 컨테이너 창 및 참조 용 탭에있는 창 스파이의 스크린 샷입니다. img43.imageshack.us/img43/7341/containere.png img25.imageshack.us/img25/2651/tabw.png 또한 방금 주요 질문 게시물.
vleeshue


0
!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

2
이것이 무엇인지 조금 설명해 주시겠습니까?
slhck

0

이것이 도움이되거나 더 많은 아이디어를 제공하는지 확인하십시오. 위의 어느 것도 사용하지 않습니다.

!z::
WinWait, Yahoo,
IfWinNotActive, Yahoo, , WinActivate,Yahoo,
WinWaitActive, Yahoo, 
Sleep, 100
return

1
이것이 질문에 대한 답변이 될 수 있지만, 그 이유에 대한 설명을 제공 할 수 있다면 더 나은 답변이 될 것 입니다.
DavidPostill

0

이 AHK 기능은 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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.