2012-01-05 37 views
5

Tôi đang viết một plugin notepad ++ bằng C# template http://sourceforge.net/projects/sourcecookifier/files/other%20plugins/NppPlugin.NET.v0.5.zip/download.notepad ++ plugin - đọc tất cả văn bản của tài liệu

Có ai biết làm cách nào để đọc tất cả văn bản tài liệu hiện tại khi tôi cần đọc tất cả văn bản thành chuỗi không?

Có ai biết chức năng đọc văn bản tài liệu hiện tại không?

+0

Tôi nghĩ Notepad ++ được viết bằng C++, chính xác cho tôi nếu tôi sai. Bạn sẽ gọi API không được quản lý của mình từ mã được quản lý và muốn chúng tôi giúp bạn với mã? – oleksii

+0

Tôi đang sử dụng mẫu C# mà bạn tìm thấy ở đây: http: //sourceforge.net/projects/sourcecookifier/files/other%20plugins/NppPlugin.NET.v0.5.zip/download – MoShe

+0

tắt chủ đề: một trong những dòng trên cùng trong tập tin Readme nói "** Hãy quên đi tất cả các phiên bản trước của gói này - đây là một cách tiếp cận hoàn toàn mới! **" Điều này thật đáng sợ! – oleksii

Trả lời

2

Mã này làm việc cho tôi, bằng cách sử dụng Demo C dự án # bạn tìm thấy ở 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. Lấy chiều dài của văn bản.
  2. Phân bổ một số bộ nhớ cho văn bản.
  3. Sử dụng độ dài và con trỏ trước đó, tải văn bản từ Notepad.
  4. Với Console.WriteLine bạn in tin nhắn hoặc làm bất cứ điều gì bạn cần.
  5. Giải phóng bộ nhớ bạn đã phân bổ trước đó.

Cập nhật: http://www.scintilla.org/ScintillaDoc.html#SCI_GETTEXT

Nó cần thiết để alloc một byte thêm cho cuối dòng ^^

Các vấn đề liên quan