2

AutoHotkey を使用して、一番上の Google Chrome ウィンドウをアクティブにしようとしています。これは私が使用しているコードです:

WinActivate, ahk_class Chrome_WidgetWin_1

ただし、効果はないようです。

しようとしている

WinGet nChromeWindows, Count, ahk_class Chrome_WidgetWin_1

nChromeWindowsクロム ウィンドウが 1 つしか開いていない場合でも、変数に 1 より大きい値を取得させます。これは、上記の WinActivate が正しく機能しない理由は、「実際の」ウィンドウが 1 つしかない場合でも複数の Chrome の「ウィンドウ」が存在するように見えるためであることを示しています。

何が起こっているのか、「実際の」(一番上の) Chrome ウィンドウを特定する方法を説明できる人はいますか?

TIA、飛満州

4

2 に答える 2

4

Google Chrome は複数の子プロセスを作成し、各プロセスは Chrome 拡張機能またはタブのバックグラウンド ウィンドウを含むウィンドウを所有します。したがって、すべての親プロセスである最も古いプロセスを見つけて、最も古いプロセスが使用しているウィンドウをアクティブにする必要があります。

Ctrl+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
}
于 2012-11-22T08:00:48.643 に答える
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で見つけました

于 2013-05-15T06:21:43.487 に答える