Làm cách nào tôi có thể sử dụng Autohotkey để tập trung vào tab Google Chrome hiện tại, chứ không phải cửa sổ Container container


16

Làm cách nào tôi có thể sử dụng Autohotkey để tập trung vào tab Google Chrome hiện tại, chứ không phải cửa sổ "container"?

Chi tiết

Google Chrome dường như đại diện cho mỗi cửa sổ với tay cầm cửa sổ chứa, chứa một hoặc nhiều tab. Các tab (ít nhất là hiện tại), có tay cầm cửa sổ riêng. Các tay cầm cửa sổ tab có tiêu đề cửa sổ (hiện tại tất cả đều kết thúc bằng "- Google Chrome"), trong khi cửa sổ container tự xử lý thì không. Mã autohotkey sau không hoạt động như dự định cho Google Chrome:

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

Liên kết này sẽ tập trung vào cửa sổ Google Chrome nếu nó tồn tại hoặc sẽ chạy Google Chrome. Tuy nhiên, nó sẽ thường nhắm mục tiêu vào cửa sổ container (trong Window Spy, tiêu đề cửa sổ trống). Kích hoạt cửa sổ container không cho phép sử dụng phím tắt Google Chrome. Các phím tắt không thể truy cập bao gồm tất cả các ctrl + l quan trọng để truy cập omnibar. Vì tôi chưa tìm được cách kích hoạt liên tục cửa sổ tab thay vì cửa sổ container, cách khắc phục của tôi là sử dụng chuột, nhưng tôi muốn tránh điều đó nếu có thể.

Window Spy Ảnh chụp màn hình

Xử lý cửa sổ container

Xử lý cửa sổ Tab

Lý lịch

Phiên bản Google Chrome hiện tại: 5.0.317.2 dev

Một ràng buộc autohotkey phổ biến tôi sử dụng là một phím tắt để tập trung vào một ứng dụng cụ thể nếu nó đang chạy hoặc để chạy ứng dụng nếu nó không chạy.

Ví dụ: tôi sử dụng cái này cho foobar2000

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

Câu trả lời:


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

Nên làm thủ thuật

("Chrome_AutocompleteEditView1" là tên của điều khiển omnibar, vì vậy bạn có thể thêm Send ^avào để chọn tất cả)

Lưu ý: Để lấy ahk_classphiên bản Chrome của bạn, ví dụ: ahk_class Chrome_WindowImp1-0sử dụng AU3_Spy.exethư mục autohotkey bên trong. Điều này sẽ cho phép bạn tìm lớp ahk chính xác cho trình duyệt chrome của mình nếu ví dụ này không hoạt động.

Cập nhật: Tôi không thể sao chép, có thể nó sẽ tốt hơn với một điều khiển khác ... Để có danh sách các điều khiển cửa sổ, tôi sử dụng mã này:

#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

Vì vậy, các điều khiển của google chrome 4.0.249.78 beta (36714) của tôi là:

  • Lượt xem TexfieldEdit1
  • Chrome_RenderWidgethostWND1
  • Chrome_AutocompleteEditView1
  • Chrome_WindowImpl_01
  • Chrome_WindowImpl_02

Cảm ơn rât nhiều. Điều này dường như hoạt động thường xuyên hơn so với chức năng trước đây của tôi (phải thay đổi ahk_group Chrome_WindowImpl_0 thành ahk_group Chrome_WidgetWin_0, nhưng điều đó có thể là do các phiên bản Google Chrome khác nhau). Thật không may, nó vẫn không hoạt động đôi khi và trường hợp đó rất khó để tái tạo. Khi tôi bị khóa vào cửa sổ container (xem ảnh chụp màn hình trong bài đăng câu hỏi), tôi vẫn phải dùng đến chuột.
vleeshue

Làm cách nào tôi có được danh sách các điều khiển Google Chrome? Sau khi sử dụng điều này một chút, tôi thích tập trung vào cửa sổ "nội dung". Ví dụ: nếu tab hoạt động là Google Reader hoặc gmail, tôi muốn truy cập vào các phím tắt trên bàn phím của họ, chỉ áp dụng khi tập trung vào cửa sổ "nội dung". Hơn nữa, tập trung vào cửa sổ "nội dung" cho phép tìm kiếm trang nhanh hơn. Ngoài ra, để truy cập omnibar từ cửa sổ "nội dung", tôi luôn có thể sử dụng ctrl + l.
vleeshue

1
Có, nó có thể tốt hơn với một điều khiển khác, xem cập nhật của tôi
fluxtendu

Hmm ... Tôi nhận được: Chrome_WidgetWin_01, Chrome_WidgetWin_02, Chrome_RenderWidgethostHWND1, ViewsTextfieldEdit1, Chrome_AutocompleteEditView1. Thời gian để suy luận mà tôi muốn kiểm soát. Cảm ơn! Update1: một số thử nghiệm nhanh cho thấy Chrome_WidgetWin_01 thực hiện những gì tôi muốn. Tôi đoán là những cái bổ sung được sinh ra dựa trên nội dung trang. Update2: tab trình đọc google chắc chắn có ít nhất một điều khiển so với tab chỉnh sửa siêu người dùng này.
vleeshue

Thật không may, tôi lại chạy vào cửa sổ "container" (tiêu đề cửa sổ trống trong gián điệp cửa sổ) và phải hoàn tác thẻ trả lời được chấp nhận. Bạn đã được một sự giúp đỡ tuyệt vời mặc dù.
vleeshue

3

Giải pháp sử dụng 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

Điều chỉnh các đối số khi cần thiết. SetKeyDelay được sử dụng vì gửi quá nhanh không hoạt động.


3

Bạn có thể muốn xem xét sử dụng tiện ích mở rộng Chrome thay vì AutoHotkey. Tiện ích mở rộng có thể có quyền truy cập vào tất cả các tab đang mở, bao gồm URL và khả năng thay đổi tiêu điểm của tab. Nếu không, có lẽ bạn sẽ cần sử dụng các tính năng Trợ năng trong Chrome để truy vấn cửa sổ đang hoạt động. Tôi tin rằng đó là cách các chương trình như RescueTime theo dõi URL hoạt động là gì. Ví dụ: sử dụng Trình theo dõi sự kiện có thể truy cập (AccEvent) từ SDK Windows 7 sẽ hiển thị các sự kiện sau khi thay đổi tab trong Chrome:

Google Chrome AccEvent


Tôi không biết về điều này. Cảm ơn cho những người đứng đầu lên.
vleeshue

Có vẻ như AutoHotkey có một số hỗ trợ để làm việc với giao diện iAccessible. Có thể muốn thử điều này và xem nếu nó giúp: autohotkey.com/forum/viewtopic.php?t=48629
Greg Bray

1

nếu bạn muốn tìm một tab chrome, bạn có thể sử dụng cái này

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

     .... do your stuff ... 

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

return

vì trong chrome mọi thứ là một quá trình, các tab của bạn cũng là các quy trình.


0

Window Spy trả về tiêu đề tab trong trường "Hiển thị văn bản cửa sổ".

Bạn có thể lặp trong các tab cho đến khi bạn tìm thấy văn bản mong muốn. Để chuyển từ tab này sang tab khác, hãy gửi các phím CTRL+ TAB. Vấn đề sẽ dừng lại ở một số điểm nhưng nếu bạn biết rằng bạn không sử dụng nhiều hơn các tab X, bạn có thể bao gồm một bộ đếm trong vòng lặp để phá vỡ tại một số điểm nếu không tìm thấy tab mong muốn.


Thật không may, tab ctrl + cũng không thể truy cập được. Đây là một ảnh chụp màn hình của gián điệp cửa sổ trên một cửa sổ container và trên tab này để tham khảo: img43.imageshack.us/img43/7341/containere.png img25.imageshack.us/img25/2651/tabw.png Tôi cũng vừa thêm chúng vào câu hỏi chính.
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
Quan tâm để giải thích một chút những gì này?
slhck

0

Xem nếu điều này giúp hoặc cung cấp cho bạn nhiều ý tưởng hơn. Tôi không sử dụng bất kỳ ở trên.

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

1
Trong khi điều này có thể trả lời câu hỏi, nó sẽ là một câu trả lời tốt hơn nếu bạn có thể cung cấp một số lời giải thích tại sao nó làm như vậy.
DavidPostill

0

Chức năng AHK này sẽ kích hoạt tab Google Chrome nếu nó tồn tại và trả về đúng sự thật. Nếu không, nó sẽ trả về 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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.