Описание функции


GetScintillaRangeText

Получает часть текста из окна Scintilla, являющимся сторонним процессом.

GetScintillaRangeText(ScintillaHandle, position, length)

Параметры

ScintillaHandle Дескриптор Scintilla
position Позиция начала диапазона
length Длина диапазона

Возвращаемое значение

Возвращает часть текста находящийся в окне Scintilla

Примечания

Получить дексриптор Scintilla можно двумя методами: передачей в качестве параметра от редактора к инструменту, либо поиском окна с элементом Scintilla.
Функция получает указатель к данным документа в указанной позиции Scintilla, открывает доступ к памяти процесса и копирует диапазон указанной длины.

См. также

GetScintillaText, SCI_GETTEXT

Пример

Procedure.s GetScintillaRangeText(ScintillaHandle, position, length)
    Protected ReturnValue.s
;     Protected length
    Protected *buffer
    Protected processId
    Protected hProcess
    Protected result

    If length
        *buffer = AllocateMemory(length + 2)
        If *buffer
            SendMessageTimeout_(ScintillaHandle, #SCI_GETRANGEPOINTER, position, 0, #SMTO_ABORTIFHUNG, 2000, @result)
            If result
                GetWindowThreadProcessId_(ScintillaHandle, @processId)
                hProcess = OpenProcess_(#PROCESS_ALL_ACCESS, #False, processId)
                If hProcess
                    ReadProcessMemory_(hProcess, result, *buffer, length, 0)
                    ReturnValue = PeekS(*buffer, -1, #PB_UTF8)
                    CloseHandle_(hProcess)
                EndIf
            EndIf
        EndIf
        FreeMemory(*buffer)
    EndIf
    ProcedureReturn ReturnValue
EndProcedure