Bam*_*a91 5 .net c# com winapi com-interop
我需要获取正在运行的对象的特定实例(来自 c#)。此应用程序可能有多个正在运行的实例。不幸的是,这个应用程序总是以完全相同的名称在 ROT 中注册(例如,“!{DED89DB0-45B6-11CE-B307-0800363A1E02}”)。我可以使用此处显示的技术遍历 ROT并找到我的应用程序的唯一实例,但是当我在 IRunningObjectTable 实例上使用 GetObject 方法时,它始终返回注册的第一个对象。
有没有办法获得对该特定对象的引用?这么近,却又这么远……
小智 3
这是一件非常复杂的事情,并且没有真正的解决方案。我们在一个项目中解决这个问题的方法如下:
- 您需要用 C++(.NET 级别太高)创建和应用程序,用您自己的方法覆盖 RegisterActiveObject 和 RevokeActiveObject,安装一个钩子。
- 您需要在启动应用程序之前启动应用程序。
- 当代码启动时,它将侦听事件以在 ROT 中创建新对象
- 您的代码需要拦截该事件(覆盖 RegisterActiveObject)
- 检查注册对象是否是您感兴趣的对象
- 如果是,那么您可以修改它` s 名称(例如通过在末尾添加 PID)并添加到 ROT
- 现在您有以下元素
!{DED89DB0-45B6-11CE-B307-0800363A1E02}
!{DED89DB0-45B6-11CE-B307-0800363A1E02}
!{DED89DB0-45B6-11CE-B307-0800363A1E02}_3365
!{DED89DB 0-45B6-11CE-B307-0800363A1E02}_4564
| 归档时间: |
|
| 查看次数: |
1294 次 |
| 最近记录: |