• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

●1000分●求助在Vista下实现此功能!!!重金悬赏~~~

dingnigefei7456 2008-12-11 09:52:29
我要将日文中的汉字转换成假名(日文的假名类似中文的拼音)

实现方法:

class类核心代码:

    public class WR_Imm32
{
public enum GCL
{
CONVERSION = 1,
REVERSECONVERSION = 2,
REVERSE_LENGTH = 3
}

[DllImport("Imm32.dll", CharSet=CharSet.Auto, EntryPoint="ImmGetContext")]
public static extern IntPtr ImmGetContext(IntPtr hWnd);

[DllImport("User32.dll", CharSet=CharSet.Auto, EntryPoint="GetKeyboardLayout")]
public static extern IntPtr GetKeyboardLayout(int idThread);

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

[DllImport("Imm32.dll", CharSet=CharSet.Auto, EntryPoint="ImmReleaseContext")]
public static extern bool MessageBox(IntPtr hWnd, IntPtr hIMC);

[DllImport("imm32.dll", EntryPoint = "ImmInstallIME")]
public static extern int ImmInstallIMEA(string lpszIMEFileName, string lpszLayoutText);

[StructLayout(System.Runtime.InteropServices.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;

}
}


具体调用放在Button上:

        private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = GetReverseConversion(textBox1.Text);
}

private string GetReverseConversion(string AText)
{
if (AText == "")
return "";
IntPtr m_hKL = WR_Imm32.GetKeyboardLayout(0);
IntPtr m_hIMC = WR_Imm32.ImmGetContext(Handle);
WR_Imm32.CANDIDATELIST m_list = new WR_Imm32.CANDIDATELIST();
int dwSize = WR_Imm32.ImmGetConversionList(m_hKL, m_hIMC, AText, IntPtr.Zero, 0, (int)WR_Imm32.GCL.REVERSE_LENGTH);
IntPtr BufList = Marshal.AllocHGlobal(dwSize);
WR_Imm32.ImmGetConversionList(m_hKL, m_hIMC, AText, BufList, dwSize, (int)WR_Imm32.GCL.REVERSECONVERSION);
Marshal.PtrToStructure(BufList, m_list);
byte[] buf = new byte[dwSize];
Marshal.Copy(BufList, buf, 0, dwSize);
Marshal.FreeHGlobal(BufList);
int os = m_list.dwOffset;
string str = System.Text.Encoding.Unicode.GetString(buf, os, buf.Length - os - 3);
string[] ret = str.Split(new string[] { "\0" }, StringSplitOptions.None);
return ret[0];
}


现在做的程序可以使用,但仅限于在XP的操作系统下。现在想让其在Vista下也能够使用。

我做了一个小例子:

http://download.csdn.net/source/858050

本程序是利用Windows自带的日语输入法,调用API来实现的。

所以要先在XP下安装日语输入法,安装方法如下:

任务栏右下右键->设定->添加->日语

因为日语输入法是IME Standard 2002 ver. 8.1,在Vista中的输入法可能版本不同导致无法使用(个人判断)

现在请高手出马,使得这段代码在Vista下也可以正常使用~~~

问题悬赏1000分,回答正确者另外开贴加分~
...全文
354 点赞 收藏 64
写回复
64 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tongwei7 2008-12-27
技术分0分都可以2000+的可用分.没做过楼主这个,可能会日语的都不多吧,这主要是给日本公司做外包才会用吧
回复
steden 2008-12-27
[Quote=引用 62 楼 gavin_luo 的回复:]
LZ真牛,我也就发了一条700分的帖子,你就整了个1000分 ~汗 膜拜一下
[/Quote]

你们也不看看楼主的技术分是多少。。
0的技术分,哪来的1000可用分?

牛。。
回复
gavinluo 2008-12-27
LZ真牛,我也就发了一条700分的帖子,你就整了个1000分 ~汗 膜拜一下
回复
heroyct 2008-12-27
c#下面用api不是unsafe code?
感觉很容易出问题
回复
heroyct 2008-12-27
mark下
随便问下 一个日语汉字 不是有多个读音么
转换的时候怎么选的?尤其是人名字的时候,自动转换不太行的通吧
回复
king19840811 2008-12-27
jf
回复
yangshenghong 2008-12-27
帮顶
回复
china_west 2008-12-27
顶上去
回复
没接触过 帮顶 等待高手出现
回复
dingnigefei7456 2008-12-27
顶到天上去!
回复
luoyanqun 2008-12-17
多顶一下吧 学习学习·
回复
ling870312lk 2008-12-17
学习学习~!
回复
a21999 2008-12-17
在vista下和XP不一样吗?难道是API变了?
回复
sxmonsy 2008-12-17
我帮你顶一下.
回复
xjw163 2008-12-17
我太菜了,帮顶挣分
回复
lordports 2008-12-17
up
回复
sageking2 2008-12-16
用微软的.NET亚洲语言开发包:http://hi.baidu.com/sageking2/blog/item/3544586408be4bf6f63654c5.html很容易就能做到.
回复
skeljy 2008-12-16
关注~ 不知道有谁会解决~
回复
q_107723600 2008-12-16
每日一顶
回复
byte377 2008-12-16
up
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-12-11 09:52
社区公告

让您成为最强悍的C#开发者