// 現在の秀丸の編集中のテキストで、カーソルがある行だけのテキスト。 // 元が何の文字コードでも関係なく秀丸がwchar_tのユニコードで返してくれるので、 // String^型に入れておけば良い。 private static String GetLineText() { if (version < 866) { OutputDebugStream(ErrorMsg.MethodNeed866); return(""); } HmCursurPos p = GetCursorPos(); String curstr = ""; IntPtr hGlobal = pGetLineTextUnicode(p.lineno); HGlobalStatus hgs = HGlobalStatus.None; if (hGlobal != null) { try { IntPtr ret = GlobalLock(hGlobal); hgs = HGlobalStatus.Lock; curstr = Marshal.PtrToStringUni(ret); GlobalUnlock(hGlobal); hgs = HGlobalStatus.Unlock; GlobalFree(hGlobal); hgs = HGlobalStatus.Free; } catch (Exception e) { OutputDebugStream(e.Message); } finally { switch (hgs) { // ロックだけ成功した case HGlobalStatus.Lock: { GlobalUnlock(hGlobal); GlobalFree(hGlobal); break; } // アンロックまで成功した case HGlobalStatus.Unlock: { GlobalFree(hGlobal); break; } // フリーまで成功した case HGlobalStatus.Free: { break; } } } } return(curstr); }
// columnやlinenoはエディタ的な座標である。 private static HmCursurPos GetCursorPos() { if (version < 866) { OutputDebugStream(ErrorMsg.MethodNeed866); return(new HmCursurPos(-1, -1)); } int column = -1; int lineno = -1; int success = pGetCursorPosUnicode(ref lineno, ref column); if (success > 0) { HmCursurPos p = new HmCursurPos(lineno, column); return(p); } return(new HmCursurPos(-1, -1)); }