检测自动热键中的活动镀铬配置文件 [英] Detecting active chrome profile in autohotkey

查看:12
本文介绍了检测自动热键中的活动镀铬配置文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个Google Chrome配置文件,1个用于工作,1个用于个人使用。有时我同时打开了这两个配置文件,我希望我的ahk脚本只在特定的配置文件窗口处于焦点时运行。因此,我查看了一些示例,并制作了如下测试脚本:

IfWinActive, ahk_exe chrome.exe 
    {
        sPat = chrome.exe.*--profile-directory="Profile 4"
        for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process  where Name = 'chrome.exe'") 
            {
                If RegExMatch(process.Commandline,sPat)
                {
                    MouseMove, 500, 500
                    Return
                }
                Else
                {
                    Return
                }
            }
    }
Else 
    {
        Return
    }

但这并不管用。该脚本无法检测到配置文件,只是直接跳到第13行。 我哪里错了?有什么方法可以修复它吗?

推荐答案

请检查是否适合您

/**
 * Description : AutoHotKey script bring specific Chrome Profile windows to the front.
 *             : While Chrome is active press Ctrl+1 ... Ctrl+5 to activate another profile.
 * Tested with : Chrome v84
 * Freelancer  : Art G. - https://www.upwork.com/freelancers/~017155e179702d4657
 * Version     : 2020-07-17
 */

#Warn
#NoEnv
#SingleInstance Force

SetBatchLines -1
SetTitleMatchMode 2

GroupAdd ChromeWindow, ahk_exe chrome.exe ahk_class Chrome_WidgetWin_1

#IfWinActive ahk_group ChromeWindow
    ^1:: ActivateProfile("Default")
    ^2:: ActivateProfile("Profile 2")
    ^3:: ActivateProfile("Profile 3")
    ^4:: ActivateProfile("Profile 4")
    ^5:: ActivateProfile("Profile 5")
#IfWinActive

ActivateProfile(profile) {
    static profiles := {}, hwnds := {}

    If (!profiles[profile]) {
        FileRead preferences, % SubStr(A_AppData, 1, -8) "LocalGoogleChromeUser Data" profile "Preferences"
        profiles[profile] := {}

        RegExMatch(preferences, "O)""name"":s*""(.+?)""", match)
        profiles[profile]["name"] := match[1]

        RegExMatch(preferences, "O)""given_name"":s*""(.+?)""", match)
        profiles[profile]["given_name"] := match[1]
    }

    WinGet hwndList, List, ahk_group ChromeWindow
    Loop % hwndList {
        hwnd := hwndList%A_Index%
        If (!hwnds[hwnd]) {
            title := Acc_ObjectFromWindow(hwnd).accName
            RegExMatch(title, "O)^.+Google Chrome . .*?([^(]+[^)]).?$", match)
            hwnds[hwnd] := match[1]
        }

        If (hwnds[hwnd] == profiles[profile]["name"] || hwnds[hwnd] == profiles[profile]["given_name"]) {
            WinActivate ahk_id %hwnd%

            For hwnd In hwnds {
                If (!WinExist("ahk_id" hwnd))
                    hwnds.Delete(hwnd)
            }

            Return
        }
    }

    Run chrome.exe --profile-directory="%profile%"
}

Acc_Init() {
    static h := DllCall("LoadLibrary", Str,"oleacc", Ptr)
}

Acc_ObjectFromWindow(hwnd, objectId := 0) {
    static OBJID_NATIVEOM := 0xFFFFFFF0

    objectId &= 0xFFFFFFFF
    If (objectId == OBJID_NATIVEOM)
        riid := -VarSetCapacity(IID, 16) + NumPut(0x46000000000000C0, NumPut(0x0000000000020400, IID, "Int64"), "Int64")
    Else
        riid := -VarSetCapacity(IID, 16) + NumPut(0x719B3800AA000C81, NumPut(0x11CF3C3D618736E0, IID, "Int64"), "Int64")

    If (DllCall("oleaccAccessibleObjectFromWindow", Ptr,hwnd, UInt,objectId, Ptr,riid, PtrP,pacc:=0) == 0)
        Return ComObject(9, pacc, 1), ObjAddRef(pacc)
}

这篇关于检测自动热键中的活动镀铬配置文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆