直接切入正題:
1.添加引用. 項目->添加引用->c:/progmme~1/msn messenger/msnmsgr.exe
2. using messengerapi;
聲明:
private messengerapi.messengerclass msn;
private messengerapi.imessengerconversationwnd msnmsgwnd;
3.init里添加:
msn = new messengerclass();
   msn.onimwindowcreated +=new dmessengerevents_onimwindowcreatedeventhandler(msn_onimwindowcreated);
   msn.onimwindowdestroyed +=new dmessengerevents_onimwindowdestroyedeventhandler(msn_onimwindowdestroyed);
4.
private void msn_onimwindowcreated(object pimwindow)
  {
   msnmsgwnd = (imessengerconversationwnd) pimwindow; //取得im窗口句柄
   #region get im message
   system.intptr ptruihwnd = nativewin32.findwindowex(msnmsgwnd.hwnd, 0, "directuihwnd", 0);  //取得窗口內directuihwnd句柄
   guid guidcom= new guid(0x618736e0,0x3c3d,0x11cf,0x81,0xc,0x0,0xaa,0x0,0x38,0x9b,0x71);  //com的guid
   iaccessible iacurrent=null;            //iaccessible集
   try
   {
    
    nativewin32.accessibleobjectfromwindow(ptruihwnd,(int)nativemsg.objid_client,ref guidcom,ref iacurrent); //取得ptruihwnd中iaccessible集
    iacurrent = (iaccessible)iacurrent.accparent;  //其父,才是iaccessible集真正的容器
    int _childcount = iacurrent.accchildcount;
    object[] _children = new object[_childcount];
    int _out;
    nativewin32.accessiblechildren(iacurrent,0,_childcount-1,_children,out _out); //從iacurrent中,將所有子iaccessible加入_children數組中
    foreach(iaccessible _child in _children)
    {
     string _accname = _child.get_accname((int)nativemsg.childid_self);
     
    }
   }
   catch(exception ex)
   {
    throw ex;
   }
   #endregion
  }
  private void msn_onimwindowdestroyed(object pimwindow)
  {
   msnmsgwnd = null;
  }
5.直接查找消息窗體的方法
private void findimwindow()
{system.intptr hwndstart;
   int _next = 0;
   do
   {
    hwndstart = nativewin32.findwindowex(0, _next, "imwindowclass", 0);
    _next =  hwndstart.toint32();
   }while(_next != 0);
}
6.最后是api聲明
 #region api wrapper
 public class nativewin32
 {
  [dllimport("user32.dll", charset=charset.auto)]
  public static extern intptr findwindowex(
   int parent /*hwnd*/, 
   int next /*hwnd*/, 
   string lpszclass,
   string swindowtitle);
  [dllimport("oleacc.dll")]
  public static extern int accessibleobjectfromwindow(
   intptr hwnd, 
   int dwobjectid, 
   guid refid,
   ref iaccessible ppvobject);
  [dllimport("oleacc.dll")]
  public static extern int accessiblechildren(
   accessibility.iaccessible pacccontainer, 
   int ichildstart, 
   int cchildren, 
   [out] object[] rgvarchildren, 
   out int pcobtained);
 }
 public enum nativemsg:long {
  childid_self  = 0,
  childid_1   = 1,
  objid_client  = 0xffffffc
 }
 #endregion
新聞熱點
疑難解答
圖片精選