如何在不使用剪贴板的情况下,获取当前选中的文本呢?
Moderators: tmplinshi, arcticir
如何在不使用剪贴板的情况下,获取当前选中的文本呢?
查看了一下帮助文档里,没有找到如何获取当前选中文本的方法,请问有人知道吗?
Re: 如何在不使用剪贴板的情况下,获取当前选中的文本呢?
格局小了。
或者说,为什么简单的方法你不用呢?你遇到了什么困难?
既然已选中了文本
按下 ^c 后选中文字就进了粘贴板,在 AHK 能直接调用粘贴板的变量 %Clipboard% 然后可以传递他用。
---------------------------------------------------
更新:今天调试一个新功能,发现这个问题的价值:
使用左键按键抬起的位移距离,和时间间隔,来判断是否选中文字;
实际测试结果:
1)vscode 和 屏幕截图: 在时间间隔内(1秒),时间一到,无论它选中多少内容,就被 ^c 输入按键阻断了选中操作。
2)idea、notion:按键多线程,不受 ^c 阻断,但复制了整行/整个区域。
3)即使未选中,只是多处单击鼠标,也会触发这个函数,挤掉粘贴板原本的内容,浪费储存空间,视觉污染。
更令人无语的是,AHK 找不到任何方法能检测到 “选中文本(高亮)” 这个行为。
这个新功能,成了负优化。
所以,放弃幻想,砍掉这个功能吧。
---------------------------------------------------
老实用 ^c 来操作;
或者添加附加延迟效果的冗余按键(Keywait),比如按选中,再按 c /前进键 ,触发复制,但这和不添加冗余按键的区别不大,不如砍掉
或者说,为什么简单的方法你不用呢?你遇到了什么困难?
既然已选中了文本
按下 ^c 后选中文字就进了粘贴板,在 AHK 能直接调用粘贴板的变量 %Clipboard% 然后可以传递他用。
Code: Select all
getSelectString() {
send, ^c
return %clipboard%
}
; 使用方法
CapsLock & 8::
a := getSelectString()
MsgBox, %a%
send, getSelectString()
return
更新:今天调试一个新功能,发现这个问题的价值:
Code: Select all
; 移动光标选中文字松开(涂色,而非拖拽到其他窗口): 复制
copyCursorSelect(){
DRAG_MOVE_TRESHOLD := 20 ; pixels
MouseGetPos, pos_x1, pos_y1
win1 := WinActive("A")
KeyWait, LButton, ,t1
if ErrorLevel
{
MouseGetPos, pos_x2, pos_y2
win2 := WinActive("A")
WinGetClass _class, A
if(((abs(pos_x2 - pos_x1) > DRAG_MOVE_TRESHOLD
or abs(pos_y2 - pos_y1) > DRAG_MOVE_TRESHOLD))
and win1 = win2 and _class != "ConsoleWindowClass")
{
SendInput ^c
}
}
}
实际测试结果:
1)vscode 和 屏幕截图: 在时间间隔内(1秒),时间一到,无论它选中多少内容,就被 ^c 输入按键阻断了选中操作。
2)idea、notion:按键多线程,不受 ^c 阻断,但复制了整行/整个区域。
3)即使未选中,只是多处单击鼠标,也会触发这个函数,挤掉粘贴板原本的内容,浪费储存空间,视觉污染。
更令人无语的是,AHK 找不到任何方法能检测到 “选中文本(高亮)” 这个行为。
这个新功能,成了负优化。
所以,放弃幻想,砍掉这个功能吧。
---------------------------------------------------
老实用 ^c 来操作;
或者添加附加延迟效果的冗余按键(Keywait),比如按选中,再按 c /前进键 ,触发复制,但这和不添加冗余按键的区别不大,不如砍掉
Last edited by miozus on 11 Sep 2021, 01:08, edited 4 times in total.
Re: 如何在不使用剪贴板的情况下,获取当前选中的文本呢?
我格局也小,也想知道如何绕过剪贴板。
据我所知只有剪贴板一种稳定简单的方法。我之前尝试过 OCR, 但是输出不如剪贴稳定。没有找到如何获取当前选中文本的方法,请问有人知道吗?
Re: 如何在不使用剪贴板的情况下,获取当前选中的文本呢?
可以试试这个,用到了剪贴板,但不更改当前剪贴板内容:
Code: Select all
; █ 获取选中文本 █
f2::
{
ClipSaved := ClipboardAll
Clipboard := ""
send ^c
ClipWait
Select_Text := Clipboard
Clipboard := ClipSaved
ClipSaved := ""
MsgBox , %Select_Text%
return
}
Re: 如何在不使用剪贴板的情况下,获取当前选中的文本呢?
剪贴板一个不好的地方就是如果没选中一定要等超时之后才能返回结果
Re: 如何在不使用剪贴板的情况下,获取当前选中的文本呢?
或者使用EditGetSelectedText,可以使用ControlGetFocus或者MouseGetPos等获得聚焦的控件名称
Code: Select all
#Requires AutoHotkey v2.0
F3::
{
ToolTip EditGetSelectedText("RichEditD2DPT1" , "A")
}
Who is online
Users browsing this forum: No registered users and 60 guests