7z 的键盘快捷键“添加到存档...”

7z 的键盘快捷键“添加到存档...”

我想为右键单击>添加到档案...Windows 文件资源管理器中的 7z 功能。

几乎与 AutoHotkey 配合使用:

#z::
    SendInput {AppsKey}a{Enter}
    Return

确实APPSKEY,有时A是可以的:

在此处输入图片描述

但有时不行,例如当选定的文件是一个文件夹时:

在此处输入图片描述

其中将为字母“A”选择另一个菜单项(此处为“添加到 MPC-HC 播放列表”)。

重要笔记:

  • 我可以在regedit.exe各种上下文菜单项中手动找到文件、文件夹、每个可能的文件扩展名(可能的扩展名太多了!),但这太长了……不是吗?(​​)

  • 我已经尝试过“级联上下文菜单”适用于 7z(可在7z 文件管理器 > 工具 > 选项... > 7-Zip菜单),但情况更糟。根据上下文,字母不一样,然后就不可能关联一致的热键

  • 一个解决方案是让 7z 注册,&Add to archive...而不仅仅是Add to archive...在上下文菜单中。如果我没记错的话&,regedit 上下文菜单设置可以帮助上下文菜单使用字母快捷键。有这个选项吗?遗憾的是,这似乎不能直接在 7-zip 中使用。


(*)是否仍可能只使用几个regedit版本?即替换Add to archive...&Add to archive?应该使用多少个键/值来完成此操作?在:

HKEY_CLASSES_ROOT\Folder\ShellEx\ContextMenuHandlers\7-Zip

我懂了:

{23170F69-40C1-278A-1000-000100020000}

这有用吗?

答案1

尝试这个

#IfWinActive ahk_class CabinetWClass    ; explorer

    #z::
        ClipSaved := ClipboardAll       ; save the entire clipboard to the variable ClipSaved
        clipboard := ""                 ; empty the clipboard (start off empty to allow ClipWait to detect when the text has arrived)
        Send, ^c                        ; copy selected item
        ClipWait, 1                     ; wait for the clipboard to contain data 
        if (!ErrorLevel)                ; If NOT ErrorLevel ClipWait found data on the clipboard
        {
            ; MsgBox, %clipboard%       ; display the path
            FileGetAttrib A, %clipboard%
            if InStr(A, "D")            ; is a folder
                SendInput {AppsKey}aa{Enter}
            else                        ; is a file
                SendInput {AppsKey}a{Enter}
        }
        else
            MsgBox, No file selected
        Sleep, 300 
        clipboard := ClipSaved         ; restore original clipboard
        VarSetCapacity(ClipSaved, 0)   ; free the memory
    return

#IfWinActive

https://www.autohotkey.com/docs/commands/_IfWinActive.htm https://www.autohotkey.com/docs/misc/Clipboard.htm#ClipboardAll https://www.autohotkey.com/docs/commands/FileGetAttrib.htm

编辑

如果我们选择多个文件进行 ZIP,这应该可以工作:

#IfWinActive ahk_class CabinetWClass    ; explorer

    #z::
        folder := false
        file := false
        ClipSaved := ClipboardAll       ; save the entire clipboard to the variable ClipSaved
        clipboard := ""                 ; empty the clipboard (start off empty to allow ClipWait to detect when the text has arrived)
        Send, ^c                        ; copy selected item
        ClipWait, 1                     ; wait for the clipboard to contain data 
        if (!ErrorLevel)                ; If NOT ErrorLevel ClipWait found data on the clipboard
        {
            Loop, Parse, Clipboard, `n  ; split by linefeed
            {
                LoopField := trim(A_LoopField, "`r`n") ; trim CRs/LFs
                FileGetAttrib A, %LoopField%
                if InStr(A, "D")        ; is a folder
                    folder := true
                else                    ; is a file
                    file := true
            }
            if (folder) 
            {
                if (file)              ; folders and files
                    SendInput {AppsKey}a{Enter}
                else                   ; only folders
                    SendInput {AppsKey}aa{Enter}
            }
            else if (file)             ; only files     
                SendInput {AppsKey}a{Enter}
        }
        else
            MsgBox, No file selected
        Sleep, 300 
        clipboard := ClipSaved         ; restore original clipboard
        VarSetCapacity(ClipSaved, 0)   ; free the memory
    return
    
#IfWinActive

相关内容