八人制足球门:.NET下基于API封装的DirectUIHWND窗体访问(. NET API packa...
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 18:36:03
.NET下基于API封装的DirectUIHWND窗体访问 [ English ]
2008-2-24 1:49:11 中国学网 跟贴 0 条 网友投稿
直接切入正题:
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转帖于 Xue163.com_VB.NET
基于API的文件传输
VB.NET编程后封装的问题
基于.NET的WEB程序的问题
[VB]如何把调用API的DLL文件封装到EXE程序本身?
请问;:MFC中封装的函数是否都是windows API函数呢/?
c# .net封装的dll文件怎么修改?
学了C评语言,想学习API函数,请问API函数的编程环境是什么,网络上好多都是基于VB的API编程.谢谢!
.NET 和基于Java的企业测量的基础
.NET 和基于Java的企业测量的基础
.NET 和基于Java的企业测量的基础
.NET 和基于Java的企业测量的基础
.net和基于java企业策略的基础
web新闻网站的源码(基于vb.net)
.NET 策略和基于 Java策略的可能其它挑战
Struts 的api文档在哪下?
vb,vb.net,C#.net的控件参考使用手册和api函数手册
基于网络环境下的自主学习
如何在VC++.NET里面使用自带的已经封装好的MD5类呀?
请问1下那有PROTEL的封装库下载
请人推荐本windows API 基于C++书
哪里有vb,c#,vb.net,c#.net以及相关如vbscript的函数手册api下载啊
VB.NET中有哪些音频函数,或者罗列一些实用的API函数.
请问下有关API函数帮助文档的问题,谢谢!
请问下有关API函数帮助文档的问题,谢谢!