C# で IME 操作(6)
ImmGetCompositionString() の、文字列を返すパラメータについての処理。
で、GCS_COMPSTR, GCS_COMPREADSTR, GCS_RESULTSTR, GCS_RESULTREADSTR で文字列を取得する処理は、こんな感じになる。
/// <summary> /// GetCompositionString によって得られるデータを string に変換して返す /// </summary> /// <param name="gcs"></param> /// <returns>変換して取得出来た文字列</returns> private string InnerGetString(int gcs) { string str = null; using (SafePtr ptr = GetCompositionString(gcs)) { if (ptr != null) { byte[] buf = new byte[ptr.Length]; Marshal.Copy(ptr.Ptr, buf, 0, buf.Length); str = Encoding.Default.GetString(buf, 0, buf.Length); } } return str; } /// <summary> /// IME に入力中の文字列を取得 /// </summary> /// <returns></returns> public string GetInputString() { return InnerGetString(GCS_COMPSTR); } /// <summary> /// IME に入力中の文字列に対する読み仮名を半角カナで取得 /// </summary> /// <returns></returns> public string GetReadString() { return InnerGetString(GCS_COMPREADSTR); } /// <summary> /// IME に最後に入力された文字列を取得 /// </summary> /// <returns></returns> public string GetLastInputString() { return InnerGetString(GCS_RESULTSTR); } /// <summary> /// IME に最後に変換された文字列に対する読み仮名を半角カナで取得 /// </summary> /// <returns></returns> public string GetLastReadString() { return InnerGetString(GCS_RESULTREADSTR); }
きれいになりました(´ω`*)