2012-11-21 108 views
2

我正在嘗試使用AutoHotkey來激活谷歌瀏覽器最頂級的窗口。這是我正在使用的代碼:無法使用AutoHotkey識別谷歌瀏覽器窗口

WinActivate, ahk_class Chrome_WidgetWin_1 

但是,它似乎沒有任何效果。

試圖

WinGet nChromeWindows, Count, ahk_class Chrome_WidgetWin_1 

使得nChromeWindows變量得到一個值,該值大於1時,即使只有一個單一的鉻窗口已打開。這表明,上面的WinActivate無法正常工作的原因是,即使只有一個「實際」一個,多個Chrome「窗口」似乎也存在。

任何人都可以解釋發生了什麼事以及如何識別「真正」(最高)Chrome窗口?

TIA,人士Himanshu

+0

你有一個'SetTitleMatchMode'設置?我有我的'SetTitleMatchMode,2',接着是你的WinActivate行,並且它成功抓取了最上面的Chrome窗口。 –

回答

3

谷歌瀏覽器創建多個子進程和每個進程擁有包括背景窗口的Chrome擴展程序或標籤的窗口。因此,您需要找出最老的進程,所有的父進程,並激活最老的進程所使用的窗口。

按下control + 1查看它是否有效。確保你有最新的AutoHotkey版本。

^1::WinActivate, % "ahk_pid " GetOldestPIDFromProcessName("chrome.exe") 

GetOldestPIDFromProcessName(strProcessName) { 

    for oProc in ComObjGet("winmgmts:").ExecQuery("Select ProcessID,CreationDate from Win32_Process WHERE Name = '" strProcessName "'") {   
     nOldestPID := (nOldestPIDCreationDate > oProc.CreationDate) ? oProc.ProcessID : nOldestPID ? nOldestPID : oProc.ProcessID 
     nOldestPIDCreationDate := oProc.CreationDate  
    } 
    return nOldestPID 
} 
+0

還沒有嘗試過,但聽起來很有希望。但是我的意圖是激活*最頂層*鉻窗口,如果有多個。 這似乎並不能解決這個問題,對吧?有沒有辦法解決這個問題? –

+0

那你爲什麼不試試呢。 – NbdNnm

+0

啊,我會的。只是想知道,在我花時間嘗試之前,你是否認爲它會處理我正在談論的情況。它可能需要你幾秒鐘的時間來回答,白我嘗試它實際上需要*分鐘*;) –

2

這從我工作:

; Activate an existing chrome.exe window, or open a new one 
if WinExist("ahk_exe chrome.exe") 
    WinActivate, ahk_exe chrome.exe 
else 
    Run, "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 

我發現這對http://l.autohotkey.net/docs/misc/WinTitle.htm