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


GetScintillaText

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

GetScintillaText(ScintillaHandle)

Параметры

ScintillaHandle Дескриптор Scintilla

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

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

Примечания

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

См. также

SCI_GETTEXT, GetScintillaRangeText

Пример

Procedure.s GetScintillaText(ScintillaHandle)
    Protected ReturnValue.s
    Protected length
    Protected *buffer
    Protected processId
    Protected hProcess
    Protected result

    length = SendMessage_(ScintillaHandle, #SCI_GETLENGTH, 0, 0)
    If length
        length + 2
        *buffer = AllocateMemory(length)
        If *buffer
            SendMessageTimeout_(ScintillaHandle, #SCI_GETCHARACTERPOINTER, 0, 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