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);
}

きれいになりました(´ω`*)