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)
  {
   try
   {
    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 "";
   }
   catch(System.NullReferenceException NullEx)
   {
    throw NullEx;
   }
   catch(Exception ex)
   {
    throw ex;
   }
  }

  //获得汉字拼音
  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