ฉันจะใช้ Autohotkey เพื่อมุ่งเน้นไปที่แท็บ Google Chrome ที่มีอยู่ไม่ใช่หน้าต่าง "คอนเทนเนอร์" ได้อย่างไร


16

ฉันจะใช้ Autohotkey เพื่อมุ่งเน้นไปที่แท็บ Google Chrome ที่มีอยู่ไม่ใช่หน้าต่าง "คอนเทนเนอร์" ได้อย่างไร

รายละเอียด

Google Chrome ดูเหมือนจะเป็นตัวแทนของแต่ละหน้าต่างด้วยที่จับหน้าต่างคอนเทนเนอร์ซึ่งมีแท็บหนึ่งแท็บขึ้นไป แท็บ (อย่างน้อยปัจจุบัน) มีหมายเลขอ้างอิงหน้าต่างของตนเอง ที่จับหน้าต่างแท็บจะมีชื่อหน้าต่าง (ซึ่งปัจจุบันลงท้ายด้วย "- Google Chrome") ในขณะที่หน้าต่างคอนเทนเนอร์นั้นไม่ได้จัดการเอง รหัส autohotkey ต่อไปนี้ใช้ไม่ได้กับ Google 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 หากมีอยู่หรือเรียกใช้ Google Chrome อย่างไรก็ตามมักจะกำหนดเป้าหมายหน้าต่างคอนเทนเนอร์ (ใน Window Spy ชื่อหน้าต่างว่างเปล่า) การเปิดใช้งานหน้าต่างคอนเทนเนอร์ไม่อนุญาตให้ใช้แป้นพิมพ์ลัดของ Google Chrome แป้นพิมพ์ลัดที่เข้าไม่ถึงรวมถึง ctrl + l ที่สำคัญทั้งหมดเพื่อเข้าถึงแถบอเนกประสงค์ เนื่องจากฉันยังไม่พบวิธีที่จะเปิดใช้งานหน้าต่างแท็บอย่างต่อเนื่องแทนหน้าต่างคอนเทนเนอร์วิธีแก้ปัญหาของฉันคือการใช้เมาส์ แต่ฉันต้องการหลีกเลี่ยงถ้าเป็นไปได้

ภาพหน้าจอของ Spy หน้าต่าง

มือจับหน้าต่างตู้คอนเทนเนอร์

จัดการหน้าต่างแท็บ

พื้นหลัง

รุ่น Google Chrome ปัจจุบัน: 5.0.317.2 dev

การผูก autohotkey ทั่วไปที่ฉันใช้เป็นแป้นพิมพ์ลัดเพื่อโฟกัสแอปพลิเคชันเฉพาะหากมันกำลังทำงานอยู่หรือเพื่อรันแอปพลิเคชันหากมันไม่ได้ทำงานอยู่

ตัวอย่างเช่นฉันใช้สิ่งนี้สำหรับ 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_classChrome เวอร์ชันของคุณเช่นahk_class Chrome_WindowImp1-0ใช้AU3_Spy.exeภายในไดเรกทอรี autohotkey สิ่งนี้จะช่วยให้คุณค้นหาคลาส ahk ที่ถูกต้องสำหรับเบราว์เซอร์ chrome ของคุณหากตัวอย่างไม่ทำงาน

อัปเดต: ฉันไม่สามารถทำซ้ำได้อาจจะดีกว่าด้วยการควบคุมอื่น ... หากต้องการมีรายการการควบคุมหน้าต่างฉันใช้รหัสนี้:

#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 เบต้า (36714) คือ:

  • ViewsTextfieldEdit1
  • Chrome_RenderWidgetHostWND1
  • Chrome_AutocompleteEditView1
  • Chrome_WindowImpl_01
  • Chrome_WindowImpl_02

ขอบคุณมาก. ดูเหมือนว่าจะทำงานได้บ่อยกว่าฟังก์ชั่นก่อนหน้าของฉัน (ต้องเปลี่ยน ahk_class Chrome_WindowImpl_0 เป็น ahk_class Chrome_WidgetWin_0 แต่นั่นอาจเป็นเพราะ Google Chrome รุ่นต่างๆ) น่าเสียดายที่มันยังใช้งานไม่ได้ในบางครั้งและกรณีนี้ยากที่จะทำซ้ำ เมื่อฉันถูกล็อคเข้าสู่หน้าต่างคอนเทนเนอร์ (ดูภาพหน้าจอในโพสต์คำถาม) ฉันยังต้องใช้เมาส์
vleeshue

ฉันจะรับรายการตัวควบคุมของ Google Chrome ได้อย่างไร หลังจากใช้บิตนี้ไปแล้วฉันอยากจะโฟกัสไปที่หน้าต่าง "เนื้อหา" ตัวอย่างเช่นหากแท็บที่ใช้งานอยู่คือ Google Reader หรือ gmail ฉันต้องการเข้าถึงแป้นพิมพ์ลัดของพวกเขาซึ่งจะใช้เฉพาะเมื่อมุ่งเน้นไปที่หน้าต่าง "เนื้อหา" นอกจากนี้การมุ่งเน้นไปที่หน้าต่าง "เนื้อหา" ช่วยให้ค้นหาหน้าได้เร็วขึ้น นอกจากนี้เพื่อไปที่แถบอเนกประสงค์จากหน้าต่าง "เนื้อหา" ฉันสามารถใช้ ctrl + l ได้ตลอดเวลา
vleeshue

1
ใช่มันอาจจะดีกว่าด้วยการควบคุมอื่นดูการอัปเดตของฉัน
fluxtendu

อืม ... ฉันได้รับ: Chrome_WidgetWin_01, Chrome_WidgetWin_02, Chrome_RenderWidgetHostHWND1, ViewsTextfieldEdit1, Chrome_AutocompleteEditView1 เวลาที่จะอนุมานว่าฉันต้องการควบคุมแบบไหน ขอบคุณ! อัปเดต 1: การทดสอบอย่างรวดเร็วเผยให้เห็น Chrome_WidgetWin_01 ทำในสิ่งที่ฉันต้องการ ฉันเดาว่าสิ่งที่เพิ่มเติมจะเกิดจากเนื้อหาหน้า Update2: แท็บผู้อ่าน google มีการควบคุมอย่างน้อยหนึ่งแท็บการแก้ไข superuser นี้อย่างแน่นอน
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

คุณอาจต้องการใช้ส่วนขยาย Chrome แทน AutoHotkey ส่วนขยายสามารถเข้าถึงแท็บที่เปิดอยู่ทั้งหมดรวมถึงURLและความสามารถในการเปลี่ยนโฟกัสของแท็บ มิฉะนั้นคุณอาจต้องใช้คุณลักษณะการเข้าถึงใน Chrome เพื่อสืบค้นหน้าต่างที่ใช้งานอยู่ ฉันเชื่อว่าเป็นวิธีที่โปรแกรมอย่าง RescueTime ติดตามสิ่งที่ URL ที่ใช้งานอยู่ ตัวอย่างเช่นการใช้ Accessible Event Watcher (AccEvent) จาก Windows 7 SDK จะแสดงเหตุการณ์ต่อไปนี้เมื่อเปลี่ยนแท็บใน Chrome:

Google Chrome AccEvent


ฉันไม่รู้เกี่ยวกับสิ่งนี้ ขอบคุณสำหรับหัวขึ้น.
vleeshue

ดูเหมือนว่า AutoHotkey มีการสนับสนุนบางอย่างสำหรับการทำงานกับอินเทอร์เฟซ iAccessible อาจต้องการลองและดูว่ามีประโยชน์หรือไม่: autohotkey.com/forum/viewtopic.php?t=48629
Greg Bray

1

หากคุณต้องการหาแท็บของโครเมี่ยมคุณสามารถใช้มันได้

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

     .... do your stuff ... 

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

return

ตั้งแต่ใน Chrome ทุกอย่างเป็นกระบวนการแท็บของคุณก็เป็นกระบวนการ


0

Window Spy ส่งคืนชื่อแท็บในฟิลด์ "หน้าต่างข้อความที่มองเห็นได้"

คุณสามารถวนซ้ำในแท็บจนกว่าคุณจะพบข้อความที่ต้องการ หากต้องการเปลี่ยนจากแท็บเป็นแท็บให้ส่งปุ่มCTRL+ TABปัญหาจะหยุดในบางจุด แต่ถ้าคุณรู้ว่าคุณไม่ได้ใช้แท็บมากกว่า X แท็บมากที่สุดคุณสามารถรวมตัวนับในลูปเพื่อหยุดที่จุดใดจุดหนึ่งหากไม่พบแท็บที่ต้องการ


น่าเสียดายที่แท็บ ctrl + ไม่สามารถเข้าถึงได้ นี่คือภาพหน้าจอของสอดแนมหน้าต่างบนหน้าต่างคอนเทนเนอร์และบนแท็บนี้สำหรับการอ้างอิง: img43.imageshack.us/img43/7341/containere.png img25.imageshack.us/img25/2651/tabw.png ฉันเพิ่งเพิ่มพวกเขาไปยัง โพสต์คำถามหลัก
vleeshue

0

ดูเหมือนว่าจะมีข้อผิดพลาดกับฟังก์ชั่น 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
!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 นี้จะเปิดใช้งานแท็บ Google Chrome หากมีอยู่และกลับมาจริง มิฉะนั้นจะส่งคืนค่าเท็จ

; 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.