因为Notepad++使用了Scintilla控件,传统的WM_GETTEXT只能获取文件的部分内容(截断了),实际就是控件的标题。
搜索后得知Scintilla控件有他自己定义的消息,SCI_GETTEXTLENGTH(2183)和SCI_GETTEXT(2182)
https://stackoverflow.com/questions/573814/retrieve-text-from-a-scintilla-control-using-sendmessage
此时SendMessage的第四个参数为Notepad++进程内的内存基址,C#想读取另一个程序的内存得使用ReadProcessMemory
完整代码如下:
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
public static ext