●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分,回答正确者另外开贴加分~
...全文
374 63 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
顶上去
tangyinglongtyler 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
  • 打赏
  • 举报
回复
关注~ 不知道有谁会解决~
qq4004229 2008-12-16
  • 打赏
  • 举报
回复
每日一顶
byte377 2008-12-16
  • 打赏
  • 举报
回复
up
加载更多回复(43)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧