04-16-2012، 03:18 PM
راه حل زیاده یکیشو میگم.
باید وضعیت کیبرد رو پیدا کنی یه دستور شرطی بزار اگر رو en بود کارکتر انگلیسی بگیره و اگر fa بود کارکتر a رو به عنوان ش در نظر بگیره
وضعیتو چک کن میتونی حتی زبان هم کاملا روی فارسی ست کنی در برنامه [/quote]
باید وضعیت کیبرد رو پیدا کنی یه دستور شرطی بزار اگر رو en بود کارکتر انگلیسی بگیره و اگر fa بود کارکتر a رو به عنوان ش در نظر بگیره
کد:
C# Signature:
[DllImport("user32.dll")]
static extern IntPtr GetKeyboardLayout(uint idThread);
کد:
///For using "imm32.dll"'s functions.
const int GCL_REVERSECONVERSION = 0x0002;
[DllImport("Imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hWnd);
[DllImport("User32.dll")]
public static extern IntPtr GetKeyboardLayout(int idThread);
[DllImport("Imm32.dll")]
public static extern int ImmGetConversionList(
IntPtr hKL,
IntPtr hIMC,
string lpSrc,
IntPtr lpDst,
int dwBufLen,
int uFlag
);
[DllImport("Imm32.dll")]
public static extern bool ImmReleaseContext(IntPtr hWnd,IntPtr hIMC);
[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;
if (AText.Length > 0)
{
IntPtr hIMC = ImmGetContext(this.Handle);
IntPtr hKL = GetKeyboardLayout(0);
int dwSize = ImmGetConversionList(hKL,hIMC,AText,IntPtr.Zero,0,GCL_REVERSECONVERSION);
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);
int os = list.dwOffset;
string str = System.Text.Encoding.Default.GetString(buf,os,buf.Length-os-3);
char[] par = "\0".ToCharArray();
strList = str.Split(par);
}
finally
{
ImmReleaseContext(this.Handle,hIMC);
}
}
}
return strList;
}
///The example of use of the above code
private void button1_Click(object sender, System.EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.AddRange(GetReverseConversion(textBox1.Text));
}
وضعیتو چک کن میتونی حتی زبان هم کاملا روی فارسی ست کنی در برنامه [/quote]
گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg