[DllImport("Imm32.dll", SetLastError=true)]
public static extern int ImmGetConversionList(
IntPtr hKL,
IntPtr hIMC,
string lpSrc,
IntPtr lpDst,
int dwBufLen,
int uFlag
);
Declare Function ImmGetConversionList Lib "Imm32.dll" (TODO) As TODO
None.
Written by K.Morono
Please add some!
const int GCL_CONVERSION = 0x0001;
const int GCL_REVERSECONVERSION = 0x0002;
const int GCL_REVERSE_LENGTH = 0x0003;
[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;
}
public string[] GetReverseConversion(string AText)
{
string[] strList = null;
IntPtr hIMC = ImmGetContext(this.Handle);
IntPtr hKL = GetKeyboardLayout(0);
if ((hIMC != IntPtr.Zero)&&(hKL != IntPtr.Zero))
{
CANDIDATELIST list = new CANDIDATELIST();
int dwSize = ImmGetConversionList(hKL,hIMC,AText,IntPtr.Zero,0,GCL_REVERSECONVERSION);
if (dwSize>0)
{
IntPtr BufList = Marshal.AllocHGlobal(dwSize);
ImmGetConversionList(hKL,hIMC,AText,BufList,dwSize,GCL_REVERSECONVERSION);
Marshal.PtrToStructure(BufList,list);
byte[] buf = new byte[dwSize];
Marshal.Copy(BufList,buf,0,dwSize);
Marshal.FreeHGlobal(BufList);
int os = list.dwOffset;
string str = System.Text.Encoding.Default.GetString(buf,os,buf.Length-os);
str = Regex.Replace(str,@"\0+$","");
char[] par = "\0".ToCharArray();
string[] temp = str.Split(par);
strList = new string[list.dwCount];
Array.Copy(temp,0,strList,0,list.dwCount);
ImmReleaseContext(this.Handle,hIMC);
}
}
return strList;
}
Do you know one? Please contribute it!