ImmGetConversionList (imm32)
Last changed: -91.119.3.204

.
Summary
TODO - a short description

C# Signature:

[DllImport("Imm32.dll", SetLastError=true)]
public static extern int ImmGetConversionList(
    IntPtr hKL,
    IntPtr hIMC,
    string lpSrc,
    IntPtr lpDst,
    int dwBufLen,
    int uFlag
    );

VB Signature:

Declare Function ImmGetConversionList Lib "Imm32.dll" (TODO) As TODO

User-Defined Types:

None.

Notes:

const int GCL_REVERSECONVERSION = 0x0002;
[StructLayout(LayoutKind.Sequential)]
public class CANDIDATELIST
{
    public int  dwSize;
    public int  dwStyle;
    public int  dwCount;
    public int  dwSelection;
    public int  dwPageStart;
    public int  dwPageSize;
    public int  dwOffset;
}

Tips & Tricks:

Please add some!

Sample Code:

public string[] GetReverseConversion(IntPtr AHwnd,string AText)
{
    string[] strList = {AText};
    if (AText.Length > 0)
    {
    IntPtr hIMC = ImmGetContext(AHwnd);
    IntPtr hKL = GetKeyboardLayout(0);
    if ((hIMC != IntPtr.Zero)&&(hKL != IntPtr.Zero))
    {
        int dwSize = ImmGetConversionList(hKL,hIMC,AText,IntPtr.Zero,0,GCL_REVERSE_LENGTH);
        if (dwSize > 0)
        {
        IntPtr BufList = Marshal.AllocHGlobal(dwSize);
        try
        {
            ImmGetConversionList(hKL,hIMC,AText,BufList,dwSize,GCL_REVERSECONVERSION);
            CANDIDATELIST list = new CANDIDATELIST();
            Marshal.PtrToStructure(BufList,list);
            byte[] buf = new byte[dwSize];
            Marshal.Copy(BufList,buf,0,dwSize);
            Marshal.FreeHGlobal(BufList);
            if (list.dwCount > 0)
            {
            int os = list.dwOffset;
            string str = System.Text.Encoding.Default.GetString(buf,os,buf.Length-os);
            char[] par = "\0".ToCharArray();
            string[] temp = str.Split(par);
            strList = new string[list.dwCount];
            Array.Copy(temp,strList,list.dwCount);
            }
        }
        finally
        {
            ImmReleaseContext(AHwnd,hIMC);
        }
        }
    }
    }
    return strList;
}

private void button1_Click(object sender, System.EventArgs e)
{
    listBox1.Items.Clear();
    listBox1.Items.AddRange(GetReverseConversion(this.Handle,textBox1.Text));
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation