Вот решение, которое я сейчас использую.По сути, все сводится к отправке ctrl+c
, ожиданию определенного времени ожидания, а затем проверке, действительно ли текст скопирован.Если это не так, я знаю, что выбора нет.
Нет никакого способа избежать ожидания тайм-аута, поскольку Windows выполняет определенное время для выполнения операции copy
.Я установил тайм-аут на 0,15 секунды, так что это не так уж и плохо.
Вот функция, которую я использую, когда хочу захватить содержимое буфера обмена или проверить, не пусто ли оно.Сначала я всегда вызываю эту функцию:
clipped_text :=
clip_empty := false
ClipSaved =
is_clipped := false
clip_speed := 0.15
Clip() {
global ClipSaved
global clip_empty
global clipped_text
global is_clipped
global clip_speed
if (!is_clipped) {
ClipSaved := ClipboardAll ; Save the entire clipboard to a variable of your choice.
; msgbox % ClipSaved
is_clipped := true
}
clipboard = ; Empty the clipboard
Send ^{c}
ClipWait clip_speed
if (ErrorLevel = 1)
{
clip_empty := false
}
else
{
clip_empty := true
clipped_text := clipboard
}
}
И я использую эту функцию, чтобы фактически получить содержимое буфера обмена или проверить, пуста ли она:
IsTextSelected() {
global ClipSaved
global clip_empty
global clipped_text
if (clip_empty == true) {
return true
}
else {
return false
}
}
Чтобы получить содержимоебуфер обмена Я просто смотрю на переменную clipped_text.
После выполнения операции Clip () я всегда вызываю следующую функцию для восстановления буфера обмена (эта функция вызывается один раз для нескольких вызововиз Clip()
):
UnClip() {
global ClipSaved
global clip_empty
global clipped_text
global is_clipped
is_clipped := false
Clipboard := ClipSaved
ClipSaved =
}