当前位置:编程学习 > C#/ASP.NET >>

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

我要将日文中的汉字转换成假名(日文的假名类似中文的拼音)

实现方法:

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分,回答正确者另外开贴加分~ --------------------编程问答-------------------- sf,帮你顶~~~~ --------------------编程问答-------------------- 补充一句,帮顶有分!!! --------------------编程问答-------------------- 这和输入法的版本也有关系?不是很理解
呵呵,Up --------------------编程问答-------------------- 俺用的还是windows.
帮顶学习了.. --------------------编程问答-------------------- 没接触过 学习了 帮你顶 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 帮顶有分 --------------------编程问答-------------------- 没研究过~~帮顶 --------------------编程问答-------------------- 顶,接分喽 --------------------编程问答-------------------- アップ --------------------编程问答-------------------- 重金之下,竟然没有勇夫!?

“高”难度,“高”挑战,“高”回报,需要“高”手出马!

没有研究过的朋友也来挑战试试看吧 --------------------编程问答-------------------- 我是来接分的!!!呵呵等待高手的出现。 --------------------编程问答-------------------- 难道没人搞得定吗!!? --------------------编程问答-------------------- 幫頂
--------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 帮顶接分,顺便期待高手 学习 --------------------编程问答-------------------- 帮顶,接分,现在在用vista ,帮你试下先 --------------------编程问答-------------------- 路过学习下 --------------------编程问答-------------------- 有分吗 --------------------编程问答-------------------- UP
不太懂.. --------------------编程问答-------------------- 没接触过,LZ是想写个自定义控件?
只有帮顶,学习了.... --------------------编程问答-------------------- 有情帮顶 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 顶到天上去。 --------------------编程问答-------------------- mark 现在还没用Vista --------------------编程问答-------------------- 这几个API函数在vista下用不了?

帮你顶………………等待高手…… --------------------编程问答-------------------- 绑定!! 我发现貌似根据拼音转换 有点不明白 !! 学习~ --------------------编程问答-------------------- 一直在用windows
研究下先 --------------------编程问答-------------------- 可惜不会啊,只能帮忙顶了 --------------------编程问答-------------------- 可惜不会啊,只能帮忙顶了 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 我要将日文中的汉字转换成假名(日文的假名类似中文的拼音) 


语句也能转换? 那样应该叫翻译吧,汉字与小日本的假名可以一一对应?
--------------------编程问答-------------------- 哦。回家看看。。刚好是vista系统。。。刚好也是学过日语的。 --------------------编程问答--------------------
引用 33 楼 Linux7985 的回复:
我要将日文中的汉字转换成假名(日文的假名类似中文的拼音) 


语句也能转换? 那样应该叫翻译吧,汉字与小日本的假名可以一一对应? 


lz说的是可以的,就是片假 就是日文里经常能看见的

(不懂日文啥写的)

ヒハ チ
 非  常 さしそ  那汉字上的日本读音标识

=》ヒハチさしそ

但是,没接触过,只能帮顶 --------------------编程问答-------------------- up --------------------编程问答--------------------
引用 35 楼 wartim 的回复:
引用 33 楼 Linux7985 的回复:
我要将日文中的汉字转换成假名(日文的假名类似中文的拼音) 


语句也能转换? 那样应该叫翻译吧,汉字与小日本的假名可以一一对应? 
 

lz说的是可以的,就是片假 就是日文里经常能看见的 

(不懂日文啥写的) 

ヒハ チ 
非  常 さしそ  那汉字上的日本读音标识 

=》ヒハチさしそ 

但是,没接触过,只能帮顶


不需要接触过日语,只要程序在Vista下能把“漢字”转换出“かんじ”就可以了 --------------------编程问答-------------------- jf! --------------------编程问答-------------------- ddddddddddddddddddddddddddddddddd --------------------编程问答-------------------- 顶上去! --------------------编程问答-------------------- 竟然无人能答! --------------------编程问答-------------------- 定 --------------------编程问答-------------------- 每日一顶 --------------------编程问答-------------------- up --------------------编程问答-------------------- 每日一顶 --------------------编程问答-------------------- 关注~ 不知道有谁会解决~ --------------------编程问答-------------------- 用微软的.NET亚洲语言开发包:http://hi.baidu.com/sageking2/blog/item/3544586408be4bf6f63654c5.html很容易就能做到. --------------------编程问答-------------------- 顶顶,现在是穷人,争分养家 --------------------编程问答-------------------- 我太菜了,帮顶挣分 --------------------编程问答-------------------- 我帮你顶一下. --------------------编程问答-------------------- 在vista下和XP不一样吗?难道是API变了? --------------------编程问答-------------------- 学习学习~! --------------------编程问答-------------------- 多顶一下吧  学习学习· --------------------编程问答-------------------- up --------------------编程问答-------------------- 顶到天上去! --------------------编程问答-------------------- 没接触过  帮顶  等待高手出现 --------------------编程问答-------------------- 顶上去 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- jf --------------------编程问答-------------------- mark下
随便问下 一个日语汉字 不是有多个读音么
转换的时候怎么选的?尤其是人名字的时候,自动转换不太行的通吧 --------------------编程问答-------------------- c#下面用api不是unsafe code?
感觉很容易出问题 --------------------编程问答-------------------- LZ真牛,我也就发了一条700分的帖子,你就整了个1000分 ~汗  膜拜一下 --------------------编程问答--------------------
引用 62 楼 gavin_luo 的回复:
LZ真牛,我也就发了一条700分的帖子,你就整了个1000分 ~汗  膜拜一下


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

牛。。 --------------------编程问答-------------------- 技术分0分都可以2000+的可用分.没做过楼主这个,可能会日语的都不多吧,这主要是给日本公司做外包才会用吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,