直接切入正题:
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
分享到:
相关推荐
标题中的".NET的Windows API封装"指的是将Windows API函数包装成.NET的类或方法,使得.NET开发者可以用C#这样的高级语言来调用。这种方式大大简化了跨语言调用的复杂性,提高了代码的可读性和可维护性。 描述中提到...
综上所述,"Dome-ASP.NET CORE 6 webapi 使用 EF DBFirst 配合 sql server"是一个基于最新.NET Core版本的Web服务开发实例,它利用了EF的DBFirst策略,使得开发人员能够快速地构建与SQL Server数据库交互的API服务。
此项目包含两个主要部分:“.NET版本WebApi”和“AccessWebApi”,它们分别扮演宿主和调用方的角色。本文将深入探讨这两个项目的核心概念、实现方式以及它们在实际开发中的应用场景。 首先,我们来看“.NET版本Web...
本主题主要围绕如何使用.NET程序集对Windows API进行封装,特别是对`kernel32`和`user32`库的封装,以方便.NET开发者更轻松地调用Windows操作系统的核心功能。 首先,`kernel32`和`user32`是Windows API中的两个...
c#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle) 带源码cs文件,非txt
该VB.NET制作的科学计算器是一个基于Windows窗体的应用程序,旨在提供一个用户友好的界面,进行各种数学运算,包括基础的四则运算以及更复杂的初等函数计算。这个项目对于初学者来说是一个很好的实践案例,因为它...
ADO.NET Entity Framework(简称EF)是微软提供的一款强大的数据访问框架,它使得开发者能够以对象关系映射(ORM)的方式操作数据库,极大地简化了数据库编程。在这个"ADO.NET Entity Framework使用封装示范代码"中...
RabbitListener是mq消息的监听,BasicPublish丢消息的方法
ASP.NET是一种基于.NET框架的服务器端编程模型,用于构建动态网站、Web应用程序和Web服务。在本项目中,“ASP.NET使用WebService创建航班查询窗体”是利用ASP.NET技术和WebService来实现一个在线航班查询功能的实例...
首先,`.NET谷歌地图API`是谷歌提供的一个接口,它允许.NET开发者通过编程方式访问和操作谷歌地图服务。这包括加载地图、设置缩放级别、添加标记、绘制路径、获取地理位置信息等功能。API通常以JavaScript或服务器端...
.net操作数据库的封装
在本文中,我们将深入探讨如何使用C#.NET 8创建一个Web API,同时结合SqlSugar作为ORM工具,以及实现仓储模式、DTO(Data Transfer Object)转换、服务层和服务控制层的架构设计。这个综合应用旨在提供一个高效且可...
在本文中,我们将深入探讨如何使用AngularJS、ASP.NET MVC、Web API和Entity Framework(EF)构建一个完整的多层Single Page Application(SPA)。这个例子,名为"SimpleTaskSystem",展示了这些技术如何协同工作,...
封装Dapper dbContext类,对Dapper 的增删查改进行封装
标题中的".Net flash control api"指的是在.NET框架下用于管理和操作Flash内容的API接口。这样的工具通常被开发者用来在Web应用程序中集成、控制和交互与Adobe Flash Player相关的功能。.NET API提供了丰富的类库和...
C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle) 这个类封装成dll后,相关数据库连接可在,引用该dll项目的app.config文件中写,如果是web程序,这需要修改代码,将构造函数中获取app.config的信息换成获取...
1、基于ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了代理...
1、支付宝电脑端扫码支付API封装 2、微信扫码支付API封装,生成微信支付的二维码地址 3、微信APP支付API封装 4、银联支付API封装 5、开发环境为Visual Studio 2015,无数据库,使用.net 4.0开发。 6、需要各个支付的...
使用.net 程序集 对windows api 的封装,包含 user32,kernel32 等核心api,便于.net开发者使用 windowsAPI
《.NET二维游戏封装类详解》 在游戏开发领域,.NET框架以其强大的库支持和易用性,逐渐成为开发者们构建2D游戏的热门选择。本文将深入探讨标题为".net二维游戏封装类"的相关知识点,这通常涉及到游戏的核心逻辑、...