不使用剪贴板获取所选文本

时间:2016-03-17 17:21:45

标签: autohotkey

我正在尝试在AutoHotKey中创建一个非常基本的文本包装器,以便在编程时使用。我让它使用剪贴板复制所选文本,修改它,然后粘贴它,但我试图避免使用剪贴板,因为它与我的剪贴板管理器不能很好地工作。有谁知道如何做到这一点?

!r:: ;Alt+R+%Char% = Wrap Text with Input Characters
    ClipSave := ClipboardAll
    Send ^c
    Input, Char, L1
    if ("" . Char = "{")
    {
        clipboard = {%clipboard%}
    }
    else if ("" . Char = "[")
    {
        clipboard = [%clipboard%]
    }
    else if ("" . Char = "(")
    {
        clipboard = (%clipboard%)
    }
    else
    {
        clipboard = %Char%%clipboard%%Char%
    }
    StringReplace, clipboard, clipboard,%A_SPACE%",", All
    Send ^v
    Clipboard := ClipSave
    ClipSave = 
return

注意:我已经看到ControlGet, text, Selected并尝试实现它,但它不起作用(没有错误,只是没有动作)。如果有人有解决方案,这将解决我的问题。

2 个答案:

答案 0 :(得分:2)

Credit to Solar on the AutoHotkey forums提出以下解决方案

使用ControlGet

从编辑控件中获取文本

这种方法有点不可靠,因为它只适用于特定的控件类型。但是,它可能是您正在寻找的解决方案,因为它根本不使用剪贴板。

WinActive("A")                           ; sets last found window
ControlGetFocus, ctrl
if (RegExMatch(ctrl, "A)Edit\d+"))       ; attempt copying without clipboard
    ControlGet, text, Selected,, %ctrl%
}

这是一个建议的解决方案,尝试使用ControlSend复制文本,但如果需要,可以使用剪贴板作为备份。

WinActive("A")                           ; sets last found window
ControlGetFocus, ctrl
if (RegExMatch(ctrl, "A)Edit\d+"))       ; attempt copying without clipboard
    ControlGet, text, Selected,, %ctrl%  
else {                                   ; fallback solution
    clipboardOld := Clipboard            ; backup clipboard
    Send, ^c                             ; copy selected text to clipboard
    if (Clipboard != clipboardOld) {
        text := Clipboard                ; store selected text
        Clipboard := clipboardOld        ; restore clipboard contents
    }
}
MsgBox % text

答案 1 :(得分:-1)

您的“剪贴板管理器”很可能适用于 ctrl + c 。添加$选项,因此它不会被 alt + r -hotkey触发,因此不会被干预。

$^c::
     ....