使用自动热键关闭特定的铬配置文件

时间:2017-10-24 08:49:33

标签: javascript google-chrome scripting autohotkey

我是AHK的新手,我正在尝试重新映射我的一些按键来打开和关闭我的电脑上的某些应用程序,以使我的生活更轻松。其中一个是谷歌浏览器,我设法打开我想要的配置文件,但我无法关闭该特定配置文件。以下是我所拥有的。

PgDn::
    Process, Exist, chrome.exe
If ErrorLevel <> 0
    Process, Close, chrome.exe
Else    
    Run, "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="Profile 1"
return

这会将chrome打开到我想要的配置文件,但是当我再次按下该按钮时,它会关闭所有镀铬窗口。我理解这是因为我关闭了chrome.exe进程,我无法弄清楚如何关闭该特定的配置文件。

最终我想要做的是按下Page Down键

If Chrome Profile 1 is not opened, open it.
If Chrome Profile 1 is minimized, maximize it.
and if Chrome Profile 1 is opened and maximized, close it.

如果有人可以提供帮助,我真的很感激。

3 个答案:

答案 0 :(得分:0)

如果您想使用Page Down键(在物理键盘上)切换,

您可以使用此autohotkey示例代码(AHK):

此代码适用于Windows 10系统。

a - 如果Chrome浏览器未运行,请运行Chrome浏览器。

b - 如果Chrome浏览器已最小化,则将其最大化。

c - 如果Chrome浏览器已最大化,请关闭Chrome浏览器。

GroupAdd, Browser, ahk_class Chrome_WidgetWin_1 ; Chrome

; + = Shift
; ! = Alt
; ^ = Ctrl
; # = Win (Windows logo key)

a = 0 ; Empty

;a = 1 - Minimize 
;a = 2 - Minimize to Maximize 
;a = 3 - Close Chrome Browser 



PgDn::
If Winactive("ahk_group Browser")
{

if (a=1)
{
sendinput #d ; if chrome browser is active then Minimize
a = 2
}else{

if (a=3)
{
sendinput !{F4} ; !=Alt (Alt+F4 = Close Chrome Browser)
}
}
} else {

if (a=2)
{
sendinput #d 
sleep 250
sendinput !{Space} 
sleep 250
sendinput x
a = 3
} else {
If Winexist("ahk_group Browser")
{
a = 1
} else {
Run, "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 
a = 1
}
}
}
return

提示:如果您将Autohotkey与Buttoncommander软件Click Here

一起使用

然后,您可以使用自动按键命令在屏幕上单击图像 - 例如[Page Down Picture key] + [如果删除代码行PgDn ::您可以使用相同的Autohotkey脚本] 用鼠标或触摸设备推动它,它将切换。

答案 1 :(得分:0)

KillChrome() {
sProfile := "Profile 1"
sPat = chrome.exe.*--profile-directory="%sProfile%"
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process  where Name = 'chrome.exe'") {
    If RegExMatch(process.Commandline,sPat){
        sCmd= taskkill /pid process.ProcessId
        Run, %sCmd%
    }
}    
}

参考:https://www.autohotkey.com/boards/viewtopic.php?t=36142 和taskkill docu https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/taskkill

答案 2 :(得分:0)

基于这个答案:https://stackoverflow.com/a/67246903/2043349 它不会终止进程,而是用 alt+f4 一一关闭窗口。

Chrome_Close(sProfile :=""){
; Close all Chrome Windows matching input Profile.
; If no Profile input, close all Chrome Windows

WinGet, Win, List, ahk_exe Chrome.exe

Loop %Win% {
    WinId := Win%A_Index%
    If !(sProfile ="") {
        WinProfile := Chrome_GetProfile(WinId) 
        If Not (WinProfile = sProfile) 
            Continue
    }

    WinActivate, ahk_id %WinId%
    WinWaitActive, ahk_id %WinId% 
   
    SendInput !{f4}
} ; end loop
} ; eofun

; ------------------------------------------------------------

Chrome_GetProfile(hwnd:=""){
; sProfile := Chrome_GetProfile(hWnd)
; returns Profile string
; hWnd: Window handle e.g. output of WinActive or WinExist
; If no argument is passed, will take current active window
If !hwnd
    hwnd := WinActive("A")

title := Acc_ObjectFromWindow(hwnd).accName
RegExMatch(title, "^.+Google Chrome . .*?([^(]+[^)]).?$", match)
return match1
}

; https://stackoverflow.com/a/62954549/2043349
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("oleacc\AccessibleObjectFromWindow", Ptr,hwnd, UInt,objectId, Ptr,riid, PtrP,pacc:=0) == 0)
        Return ComObject(9, pacc, 1), ObjAddRef(pacc)
}