2012-01-05 2 views
5

Я пишу блокнот + плагин с использованием шаблона C# http://sourceforge.net/projects/sourcecookifier/files/other%20plugins/NppPlugin.NET.v0.5.zip/download.блокнот notepad ++ - чтение всего текста документа

Кто-нибудь знает, как я могу прочитать весь текущий текст документа, поскольку мне нужно прочитать весь текст в строке?

Кто-нибудь знает функцию, которая читает текущий текст документа?

+0

Я думал Notepad ++ был написан на C++, поправьте меня, если я ошибаюсь. Вы собираетесь называть его неуправляемые API из управляемого кода и хотите, чтобы мы помогли вам с кодом? – oleksii

+0

Я использую шаблон C#, который вы нашли здесь: http: //sourceforge.net/projects/sourcecookifier/files/other%20plugins/NppPlugin.NET.v0.5.zip/download – MoShe

+0

вне темы: одна из самых верхних строк в файле Readme говорится: «** Забудьте обо всех предыдущих версиях этого пакета - это совершенно новый подход! **« Это страшно! – oleksii

ответ

5

Реферирования документации по API Scintilla вы должны получить в правильном направлении:

http://www.scintilla.org/ScintillaDoc.html#SCI_GETTEXT

Демо-проект, который вы связаны есть пример отправки сообщения.

2

Этот код работает для меня, используя # проект Demo C вы найдете в Notepad ++ Web:

int length = (int) Win32.SendMessage(GetCurrentScintilla(), SciMsg.SCI_GETLENGTH, 0, 0); 
IntPtr ptrToText = Marshal.AllocHGlobal(length+1); 
Win32.SendMessage(GetCurrentScintilla(), SciMsg.SCI_GETTEXT, length, ptrToText); 
string textAnsi = Marshal.PtrToStringAnsi(ptrToText); 
Console.WriteLine(textAnsi); 
Marshal.FreeHGlobal(ptrToText); 
  1. Получить длину текста.
  2. Alloc некоторая память для текста.
  3. Используя длину и предыдущий указатель, получите текст из Блокнота.
  4. С Console.WriteLine вы печатаете сообщение или делаете нужный вам.
  5. Освободите память, которую вы выделили ранее.

Update: http://www.scintilla.org/ScintillaDoc.html#SCI_GETTEXT

Это необходимо, чтобы Alloc дополнительный байт для конца строки ^^

Смежные вопросы