2012-11-21 121 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