我的多剪贴板无法使用

我的多剪贴板无法使用

我对使用 3 个不同热键可访问的多个剪贴板感兴趣。

(理想情况下,(control+1)、control+2、control+3 用于复制,alt+1、alt+2 和 alt+3 用于粘贴。

首先我尝试使用以下代码来使用 autohotkey:

#Persistent

; Hotkeys
^F1::Copy(1)
^+F1::Paste(1)

^F2::Copy(2)
^+F2::Paste(2)

^F3::Copy(3)
^+F3::Paste(3)

Copy(clipboardID)
{
    global ; All variables are global by default
    local oldClipboard := ClipboardAll ; Save the (real) clipboard

    Clipboard = ; Erase the clipboard first, or else ClipWait does nothing
    Send ^c
    ClipWait, 2, 1 ; Wait 1s until the clipboard contains any kind of data
    if ErrorLevel 
    {
        Clipboard := oldClipboard ; Restore old (real) clipboard
        return
    }

    ClipboardData%clipboardID% := ClipboardAll

    Clipboard := oldClipboard ; Restore old (real) clipboard
}

Cut(clipboardID)
{
    global ; All variables are global by default
    local oldClipboard := ClipboardAll ; Save the (real) clipboard

    Clipboard = ; Erase the clipboard first, or else ClipWait does nothing
    Send ^x
    ClipWait, 2, 1 ; Wait 1s until the clipboard contains any kind of data
    if ErrorLevel 
    {
        Clipboard := oldClipboard ; Restore old (real) clipboard
        return
    }
    ClipboardData%clipboardID% := ClipboardAll

    Clipboard := oldClipboard ; Restore old (real) clipboard
}

Paste(clipboardID)
{
    global
    local oldClipboard := ClipboardAll ; Save the (real) clipboard

    Clipboard := ClipboardData%clipboardID%
    Send ^v

    Clipboard := oldClipboard ; Restore old (real) clipboard
    oldClipboard = 
}

我使用这些热键是因为,就像这个人提到的,只有少数可能的热键组合不被其他程序采用。

但它总是出问题。它总是忘记我保存的新内容,并不断插入通过常规剪贴板命令“control+c”保存的内容。

有什么想法可以解决这个问题吗?我还尝试使用“ditto”,但未能让它真正注册多个剪贴板的键...

答案1

如果程序以管理员权限运行,AHK 将不会拦截按键,这可能是问题背后的原因。

如果是这种情况,请尝试通过将其添加到自动执行部分(脚本顶部)以管理员身份运行 AHK 脚本:

; If the script is not elevated, relaunch as administrator and kill current instance:

full_command_line := DllCall("GetCommandLine", "str")

if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
    try ; leads to having the script re-launching itself as administrator
    {
        if A_IsCompiled
            Run *RunAs "%A_ScriptFullPath%" /restart
        else
            Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
    }
    ExitApp
}

更多详细信息请阅读https://autohotkey.com/docs/commands/Run.htm#RunAs

答案2

运行为行政解决方案对我来说不起作用。我最终将粘贴命令从 改为Send ^vSendInput %clipboard%然后它开始完美运行。

相关内容