使用C#访问COM对象中隐藏的动态属性

时间:2018-04-26 10:06:52

标签: c# com system.reflection ituneslibrary

我需要访问COM对象(iTunes COM库)中的特定属性。您可以使用Visual Studio调试器的动态视图访问此属性。

Visual Studio Dynamic Debug View

我尝试使用Reflection获取此属性,但我没有获得任何私有属性或字段。

我可以使用以下行访问我在调试器中看到的所有属性:

new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(myObject).Items

但是,我宁愿不使用此调用,因为我相信存在更简单的解决方案。

如果您安装了iTunes,这将是我想要实现的一个简单示例:

iTunesAppClass app;
if (Process.GetProcessesByName("iTunes").Any())
{
    app = new iTunesAppClass();
}
else
{
   return;
}

foreach (IITPlaylist playlist in app.LibrarySource.Playlists)
{
    // This does not work. There is no "Parent".
    //var parent = playlist.Parent;

    Type playListType = playlist.GetType();

    // both contain 0 results
    var fields = playListType.GetFields(BindingFlags.NonPublic);
    var properties = playListType.GetFields(BindingFlags.NonPublic);

    // works but only during runtime
    //var parent2 = new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(playlist).Items[4];
}

0 个答案:

没有答案