Otomatik kapsayıcıyı bir "kapsayıcı" pencereye değil, mevcut bir Google Chrome sekmesine odaklanmak için nasıl kullanabilirim?


16

"Kapsayıcı" bir pencereye değil, mevcut bir Google Chrome sekmesine odaklanmak için Autohotkey'i nasıl kullanabilirim?

ayrıntılar

Google Chrome, her pencereyi bir veya daha fazla sekme içeren bir kapsayıcı pencere tutamacıyla temsil ediyor gibi görünüyor. Sekmeler (en azından geçerli olan) kendi pencere tutamağına sahiptir. Sekme pencere tutamaçlarının pencere başlıkları vardır (şu anda tümü "- Google Chrome" ile bitmektedir), ancak kapsayıcı pencere tutamacının kendisi yoktur. Aşağıdaki otomatik hızlı erişim kodu Google Chrome için tasarlandığı gibi çalışmaz:

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

Bu bağlama, Google Chrome varsa veya çalıştırırsa bir Google Chrome penceresine odaklanır. Ancak, genellikle kap penceresini hedefler (Window Spy'da pencere başlığı boştur). Kapsayıcı penceresinin etkinleştirilmesi, Google Chrome klavye kısayollarının kullanılmasına izin vermez. Erişilemeyen klavye kısayolları, omnibar'a erişmek için tüm önemli ctrl + l tuşlarını içerir. Kap penceresi yerine sekme penceresini tutarlı bir şekilde etkinleştirmenin bir yolunu bulamadığım için, geçici çözümüm fareyi kullanmaktır, ancak mümkünse bundan kaçınmayı tercih ederim.

Window Spy Ekran Görüntüleri

Konteyner Pencere Kolu

Sekme Pencere Tutamağı

Arka fon

Mevcut Google Chrome Sürümü: 5.0.317.2 dev

Kullandığım yaygın bir otomatik kısayol tuşu, zaten çalışıyorsa belirli bir uygulamayı odaklamak veya çalışmıyorsa uygulamayı çalıştırmak için bir klavye kısayoludur.

Örneğin, bunu foobar2000 için kullanıyorum

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

Yanıtlar:


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

Hile yapmalı

("Chrome_AutocompleteEditView1", omnibar kontrolünün adıdır, bu nedenle Send ^atümünü seçmek için ekleyebilirsiniz )

Not:ahk_class Örneğin Chrome sürümünüzün sürümünü almak için autohotkey dizininin içini ahk_class Chrome_WindowImp1-0kullanın AU3_Spy.exe. Bu, örnek çalışmazsa krom tarayıcınız için doğru ahk sınıfını bulmanızı sağlar.

Güncelleme: Yeniden üretemiyorum, belki başka bir kontrolle daha iyi olacak ... Bir pencere kontrollerinin listesine sahip olmak için bu kodu kullanıyorum:

#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

Yani benim google chrome 4.0.249.78 beta (36714) kontrolleri:

  • ViewsTextfieldEdit1
  • Chrome_RenderWidgetHostWND1
  • Chrome_AutocompleteEditView1
  • Chrome_WindowImpl_01
  • Chrome_WindowImpl_02

Çok teşekkür ederim. Bu, önceki işlevimden çok daha sık çalışıyor gibi görünüyor (ahk_class Chrome_WindowImpl_0'ı ahk_class Chrome_WidgetWin_0 olarak değiştirmek zorunda kaldım, ancak bunun nedeni Google Chrome'un farklı sürümlerinden kaynaklanıyor olabilir). Ne yazık ki, hala bir süre işe yaramıyor ve bu davanın yeniden üretilmesi zor. Bir kap penceresine kilitlendikten sonra (soru yazısında ekran görüntüsüne bakın), yine de fareye başvurmam gerekiyor.
vleeshue

Google Chrome denetimlerinin bir listesini nasıl alabilirim? Bunu biraz kullandıktan sonra "içerik" penceresine odaklanmayı tercih ederim. Örneğin, etkin sekme Google Reader veya gmail ise, yalnızca "içerik" penceresine odaklanırken geçerli olan klavye kısayollarına erişmek istiyorum. Ayrıca, "içerik" penceresine odaklanmak daha hızlı sayfa aramaya olanak tanır. Ayrıca, "içerik" penceresinden omnibar almak için her zaman ctrl + l kullanabilirsiniz.
vleeshue

1
Evet, başka bir kontrolle daha iyi olabilir, güncellememe bakın
fluxtendu

Hmm ... Anladım: Chrome_WidgetWin_01, Chrome_WidgetWin_02, Chrome_RenderWidgetHostHWND1, ViewsTextfieldEdit1, Chrome_AutocompleteEditView1. Hangi kontrolü istediğimi bulma zamanı. Teşekkürler! Update1: bazı hızlı testler Chrome_WidgetWin_01 istediğimi yapıyor. Tahminimce, sayfa içeriğine göre ek olanlar üretilir. Güncelleme2: Bir google okuyucu sekmesi kesinlikle bu süper kullanıcı düzenleme sekmesinden en az bir kontrol daha içeriyor.
vleeshue

Ne yazık ki, tekrar "kapsayıcı" penceresine (pencere casus boş pencere başlığı) koşuyorum ve kabul edilen cevap etiketini geri almak zorunda kaldı. Yine de çok yardımcı oldunuz.
vleeshue

3

Alt + Sekme kullanarak geçici çözüm:

; 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

Argümanları gerektiği gibi ayarlayın. SetKeyDelay kullanılır çünkü çok hızlı gönderme çalışmaz.


3

AutoHotkey yerine bir Chrome uzantısı kullanmaya bakmak isteyebilirsiniz. Uzantılar, URL ve sekme odağını değiştirme yeteneği dahil tüm açık sekmelere erişebilir . Aksi takdirde , etkin pencereyi sorgulamak için muhtemelen Chrome'daki Erişilebilirlik özelliklerini kullanmanız gerekir . RescueTime gibi programların aktif URL'nin ne olduğunu izlediğine inanıyorum. Örneğin, Windows 7 SDK'sından Erişilebilir Olay İzleyici'yi (AccEvent) kullanmak, Chrome'daki sekmeleri değiştirirken aşağıdaki etkinlikleri gösterir:

Google Chrome AccEvent


Bunu bilmiyordum. Söylediğin için teşekkürler.
vleeshue

AutoHotkey'in iAccessible arabirimi ile çalışmak için bazı desteği var gibi görünüyor. Bunu denemek ve yardımcı olup olmadığını görmek isteyebilirsiniz: autohotkey.com/forum/viewtopic.php?t=48629
Greg Bray

1

bir krom sekmesi bulmak istiyorsanız bunu kullanabilirsiniz

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

     .... do your stuff ... 

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

return

chrome'da her şey bir süreç olduğundan, sekmeleriniz de süreçlerdir.


0

Window Spy, "Görünür Pencere Metni" alanındaki sekme başlığını döndürür.

İstediğiniz metni bulana kadar sekmeler arasında geçiş yapabilirsiniz. Sekmeden sekmeye geçmek için CTRL+ TABtuşlarını gönderin . Sorun bir noktada durmak olacaktır, ancak en fazla X sekmesi kullanmadığınızı biliyorsanız, istenen sekme bulunmazsa döngüde bir noktada kırmak için bir sayaç ekleyebilirsiniz.


Ne yazık ki, ctrl + sekmesine de erişilemiyor. İşte bir konteyner penceresinde ve referans için bu sekmede pencere casusu ekran görüntüsü: img43.imageshack.us/img43/7341/containere.png img25.imageshack.us/img25/2651/tabw.png Bunları da yeni ekledim ana soru yazısı.
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
Bunun ne yaptığını biraz açıklamak ister misiniz?
slhck

0

Bunun size yardımcı olup olmadığını ya da size daha fazla fikir verebileceğini görün. Yukarıdakilerin hiçbirini kullanmıyorum.

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

1
Bu soruya cevap verebilir, ancak neden böyle yaptığını açıklayabilirseniz daha iyi bir cevap olacaktır .
DavidPostill

0

Bu AHK işlevi, varsa bir Google Chrome sekmesini etkinleştirir ve true değerini döndürür. Aksi takdirde, yanlış döner.

; 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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.