快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

.net下基于API封装的DirectUIHWND窗体访问

 

直接切入正题:

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





返回类别: 教程
上一教程: asp.net 的菜单制作(asp.net 的菜单application)
下一教程: 从 Visual Basic 6.0 到 Visual Basic.NET 的转变(4)

您可以阅读与".net下基于API封装的DirectUIHWND窗体访问"相关的教程:
· .NET中窗体间相互访问的几种方法
· .net中一些所封装的类
· .NET框架中基于角色的安全性(3)
· ASP.NET可交互式位图窗体设计(7)
· Dotnet总结(2)--访问ms sql server 数据库基类--2
    微笑服务 优质保证 索取样品