1

Тема: WSH or AHK: Копирование выделенных ссылок

Умеют ли WSH или AHK копировать выделенный текст с форматированием?
Если да, — можно было бы приладить нижеследующий код, извлекающий ссылки из файла, к заявленной теме, — сохранил выделенный фрагмент с форматированием --> извлёк его линки в буфер.



; Пример №3: скрипт пытается извлечь все адреса FTP и HTTP из текстового или HTML файла.
FileSelectFile, SourceFile, 3,, Выберите текстовый или HTML файл для анализа.
if SourceFile =
    return ; В таком случае выйти.

SplitPath, SourceFile,, SourceFilePath,, SourceFileNoExt
DestFile = %SourceFilePath%\%SourceFileNoExt% Extracted Links.txt

IfExist, %DestFile%
{
    MsgBox, 4,, Переписать существующий файл со ссылками? Нажмите "Нет", чтобы добавить.`n`nФайл: %DestFile%
    IfMsgBox, Yes
        FileDelete, %DestFile%
}

LinkCount = 0
Loop, read, %SourceFile%, %DestFile%
{
    URLSearchString = %A_LoopReadLine%
    Gosub, URLSearch
}
MsgBox %LinkCount% ссылок было найдено и записано в "%DestFile%".
return

URLSearch:
; Это делается именно так потому, что некоторые URL содержат внутри себя другие URL:
StringGetPos, URLStart1, URLSearchString, http://
StringGetPos, URLStart2, URLSearchString, ftp://
StringGetPos, URLStart3, URLSearchString, www.

; Найти самую левую стартовую позицию:
URLStart = %URLStart1% ; Задать старт по умолчанию.
Loop
{
    ; Это улучшает производительность (по крайней мере в скрипте со многими переменными),
    ; если "URLStart%A_Index%" вычисляется только один раз:
    ArrayElement := URLStart%A_Index%
    if ArrayElement = ; Достигнут конец массива.
        break
    if ArrayElement = -1 ; Этот элемент дисквалифицируется.
        continue
    if URLStart = -1
        URLStart = %ArrayElement%
    else ; URLStart содержит допустимую позицию, поэтому сравнить её с ArrayElement.
    {
        if ArrayElement <> -1
            if ArrayElement < %URLStart%
                URLStart = %ArrayElement%
    }
}

if URLStart = -1 ; URLSearchString не содержит URL.
    return

; Иначе извлечь этот URL:
StringTrimLeft, URL, URLSearchString, %URLStart% ; Опустить начальную/ненужную часть.
Loop, parse, URL, %A_Tab%%A_Space%<> ; Найти первый пробел, табуляцию или угловую скобку (если есть).
{
    URL = %A_LoopField%
    break ; т.е. совершается только одна итерация цикла, чтобы извлечь первое "поле".
}
; Если цикл выше совершил ноль итераций, поскольку не было найдено ни одного конечного символа,
; оставить содержимое переменной URL нетронутым.

; Если URL оканчивается двойной кавычкой, удалить её. Сейчас для этого используется StringReplace,
; но имейте в виду, что двойные кавычки, видимо, разрешены внутри URL, так что это может их повредить:
StringReplace, URLCleansed, URL, ",, All
FileAppend, %URLCleansed%`n
LinkCount += 1

; Нет ли в этой строке других URL:
StringLen, CharactersToOmit, URL
CharactersToOmit += %URLStart%
StringTrimLeft, URLSearchString, URLSearchString, %CharactersToOmit%
Gosub, URLSearch ; Рекурсивный вызов подпрограммой самой себя.
return

2

Re: WSH or AHK: Копирование выделенных ссылок

DD пишет:

Умеют ли WSH или AHK копировать выделенный текст с форматированием?

AHK точно не умеет!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: WSH or AHK: Копирование выделенных ссылок

В буфер обмена копирует текст не АНК, а приложение, где текст выделен. АНК только может послать команду на копирование, т.е. Ctrl-C или подобную. Приложение может копировать текст в разных форматах, в том числе и HTML. IE и Firefox копируют выделенное в HTML, а Опера вроде бы нет. Извлечь его можно, вот тут я постил функцию для этого. Посмотрите, возможно, сгодится для Ваших целей.

4

Re: WSH or AHK: Копирование выделенных ссылок

Благодарю!