天天看點

漢字拼音及拼音碼擷取

public class ClassIME_Spell_Code

 {

  public ClassIME_Spell_Code()

  {

  }

  #region 漢字拼音碼

  /// <summary>

  /// 漢字拼音碼

  /// </summary>

  public static string GetIME_Spell(string strIMEChar)

   string strResult = "";

   try

   {

    for (int i = 0 ; i < strIMEChar.Length ; i++)

    {

     strResult = strResult + Extract_HZ(strIMEChar.Substring(i,1));

    }

    return strResult;

   }

   catch(System.NullReferenceException NullEx)

    throw NullEx;

   catch(Exception ex)

    throw ex;

  //這裡是獲得拼音的第一個字母

  public static string  Extract_HZ(string HZ)

    byte[] ZW = new byte[2];

    long HZ_INT;

    ZW = System.Text.Encoding.Default.GetBytes(HZ);

    // get the  array of byte from the single char

    if (ZW.Length <= 1 )

     return HZ;

    int i1 = (short)(ZW[0]);

    int i2 = (short)(ZW[1]);

    HZ_INT=i1*256+i2; //  expresstion

    //table of the constant list

    // 'A';     //45217..45252

    // 'B';     //45253..45760

    // 'C';     //45761..46317

    // 'D';     //46318..46825

    // 'E';     //46826..47009

    // 'F';     //47010..47296

    // 'G';     //47297..47613

    // 'H';     //47614..48118

    // 'J';     //48119..49061

    // 'K';     //49062..49323

    // 'L';     //49324..49895

    // 'M';     //49896..50370

    // 'N';     //50371..50613

    // 'O';     //50614..50621

    // 'P';     //50622..50905

    // 'Q';     //50906..51386

    // 'R';     //51387..51445

    // 'S';     //51446..52217

    // 'T';     //52218..52697

    //沒有U,V

    // 'W';     //52698..52979

    // 'X';     //52980..53640

    // 'Y';     //53689..54480

    // 'Z';     //54481..55289

    // HZ_INT match  the constant

    if  ((HZ_INT>=45217) && (HZ_INT<=45252))

     return "A";

    if ((HZ_INT>=45253) && (HZ_INT<=45760))

     return "B";

    if  ((HZ_INT>=45761) && (HZ_INT<=46317))

     return "C";

    if ((HZ_INT>=46318) && (HZ_INT<=46825))

     return "D";

    if  ((HZ_INT>=46826) && (HZ_INT<=47009))

     return "E";

    if ((HZ_INT>=47010) && (HZ_INT<=47296))

     return "F";

    if ((HZ_INT>=47297) && (HZ_INT<=47613))

     return "G";

    }

    if ((HZ_INT>=47614) && (HZ_INT<=48118))

     return "H";

    if ((HZ_INT>=48119) && (HZ_INT<=49061))

     return "J";

    if ((HZ_INT>=49062) && (HZ_INT<=49323))

     return "K";

    if ((HZ_INT>=49324) && (HZ_INT<=49895))

     return "L";

    if ((HZ_INT>=49896) && (HZ_INT<=50370))

     return "M";

    if ((HZ_INT>=50371) && (HZ_INT<=50613))

     return "N";

    if ((HZ_INT>=50614) && (HZ_INT<=50621))

     return "O";

    }                     

    if ((HZ_INT>=50622) && (HZ_INT<=50905))

     return "P";

    }          

    if ((HZ_INT>=50906) && (HZ_INT<=51386))

     return "Q";

    } 

    if ((HZ_INT>=51387) && (HZ_INT<=51445))

     return "R";

    if ((HZ_INT>=51446) && (HZ_INT<=52217))

     return "S";

    if ((HZ_INT>=52218) && (HZ_INT<=52697))

     return "T";

    if ((HZ_INT>=52698) && (HZ_INT<=52979))

     return "W";

    if ((HZ_INT>=52980) && (HZ_INT<=53640))

     return "X";

    if ((HZ_INT>=53689) && (HZ_INT<=54480))

     return "Y";

    if ((HZ_INT>=54481) && (HZ_INT<=55289))

     return "Z";

    return "";

  //獲得漢字拼音

  class ClassIME_Spell_Full

  {

   public ClassIME_Spell_Full()

   public const uint IME_REGWORD_STYLE_USER_FIRST    =0x80000000;

   private string result,srcstring="字";

   public delegate void Mycallback(string lpszReading,uint dwStyle,string lpszString,object o);

   public Mycallback myc;

   [DllImport("imm32.dll")]

   public static extern uint ImmEnumRegisterWord( uint hkl,Mycallback lpfnEnumProc,string lpszReading, uint dwStyle,string lpszRegister, object o);

   //Call this to register word

   public void ImmCall(string[] args)

    myc=new Mycallback(MyCBProc);

    //注冊回調函數,srcstring裡面存儲要查的漢字

    uint x=ImmEnumRegisterWord(0xE00E0804,myc,null,IME_REGWORD_STYLE_USER_FIRST+1,srcstring,null);

   //callback函數,每次回調傳回漢字的一個讀音(多音字)

   public void  MyCBProc(string lpszReading,uint dwStyle,string lpszString,object o)

    result+=lpszReading;

  #endregion

 }

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/cnming/archive/2004/12/20/222373.aspx

繼續閱讀