Adding a reference to MediaMonkey: Difference between revisions

From MediaMonkey Wiki
Jump to navigation Jump to search
No edit summary
Line 11: Line 11:


==Subscribing to events==
==Subscribing to events==
* According to Forum Posts subscribing to events does not work with external applications, like .NET applications:
Subscribing to events does not work with external applications, like .NET applications if they make the connection to the MediaMonkey application. See:
** [https://www.mediamonkey.com/forum/viewtopic.php?f=19&t=29201&p=291459 Events don't work with C#]
* [https://www.mediamonkey.com/forum/viewtopic.php?f=19&t=29201&p=291459 Events don't work with C#]
** [https://www.mediamonkey.com/forum/viewtopic.php?f=19&t=45676&p=297214 Trouble With Handling COM Events]
* [https://www.mediamonkey.com/forum/viewtopic.php?f=19&t=45676&p=297214 Trouble With Handling COM Events]
* There is however some talk about a solution in:
A solution is presented in:
** [http://www.mediamonkey.com/forum/viewtopic.php?f=2&t=14004&hilit=com+events MonkeyToys: VB.NET extension adding MCE remote support]
* [http://www.mediamonkey.com/forum/viewtopic.php?f=2&t=14004&hilit=com+events MonkeyToys: VB.NET extension adding MCE remote support]
 
===Walkthrough===
This solution is based on making your assembly ComVisible, registering it and letting an auto-script in MediaMonkey create your application object.  This can be accomplished by creating a class along the lines under.
* First build and run your program, then call the RegisterCOM() Method to register your application with COM.
''(continued after C#-code)''
 
<source lang="csharp">
using System.Reflection;
using System.Runtime.InteropServices;
using SongsDB;
 
namespace SomeNamespace {
  [ComVisible(true)] // this overrides [assembly: ComVisible(false)] (is set by project options dialog) so registry don't get bloated with unneeded types
  public class EventTest {
    public SDBApplication SDB { get; private set; }
 
    public static void RegisterCOM() {
      RegistrationServices rs = new RegistrationServices();
      rs.RegisterAssembly(Assembly.GetExecutingAssembly(),
        AssemblyRegistrationFlags.SetCodeBase);
    }
    public static void UnRegisterCOM() {
      RegistrationServices rs = new RegistrationServices();
      rs.UnregisterAssembly(Assembly.GetExecutingAssembly());
    }
    public void Init(SDBApplication mm) {
      this.SDB = mm;
      this.SDB.set_Objects(Assembly.GetExecutingAssembly().GetName().Name, this);
      this.SDB.OnPlay += () => { System.Windows.MessageBox.Show("OnPlay event fired!"); };
    }
  }
}
</source>
* Add an autoscript-to mediamonkey (ie. a file in ...\MediaMonkey\Scripts\Auto) named SomeScript.vbs that starts your application and runs the Init function.  It's contents should be like this:
<source lang="vb">
Sub OnStartup
  Set o = CreateObject("SomeNamespace.EventTest")
  o.Init(SDB)
End Sub
</source>
* When you now start MediaMonkey it will connect to your application and event firing will work.
<!--Check out the post by stax76 on Tue Dec 26, 2006 11:08 am.  Possibly this code could work:


Check out the post by stax76 on Tue Dec 26, 2006 11:08 am.  Possibly this code could work:
<source lang="csharp">
<source lang="csharp">
using System;
using System;
Line 78: Line 119:
   }
   }
}
}
</source>
</source>-->


==Links==
==Links==

Revision as of 13:25, 17 May 2011

Here you can find resources related to automating MediaMonkey in .NET (C#/VB.NET), including very simple beginners tips & tricks.

Adding a reference to MediaMonkey

  1. Choose Add Reference
  2. Go to the COM Tab
  3. Choose "MediaMonkey Library"

The base Namespace for MediaMonkey is SongsDB:

  using SongsDB;

Subscribing to events

Subscribing to events does not work with external applications, like .NET applications if they make the connection to the MediaMonkey application. See:

A solution is presented in:

Walkthrough

This solution is based on making your assembly ComVisible, registering it and letting an auto-script in MediaMonkey create your application object. This can be accomplished by creating a class along the lines under.

  • First build and run your program, then call the RegisterCOM() Method to register your application with COM.

(continued after C#-code)

using System.Reflection;
using System.Runtime.InteropServices;
using SongsDB;

namespace SomeNamespace {
  [ComVisible(true)] // this overrides [assembly: ComVisible(false)] (is set by project options dialog) so registry don't get bloated with unneeded types
  public class EventTest {
    public SDBApplication SDB { get; private set; }

    public static void RegisterCOM() {
      RegistrationServices rs = new RegistrationServices();
      rs.RegisterAssembly(Assembly.GetExecutingAssembly(),
        AssemblyRegistrationFlags.SetCodeBase);
    }
    public static void UnRegisterCOM() {
      RegistrationServices rs = new RegistrationServices();
      rs.UnregisterAssembly(Assembly.GetExecutingAssembly());
    }
    public void Init(SDBApplication mm) {
      this.SDB = mm;
      this.SDB.set_Objects(Assembly.GetExecutingAssembly().GetName().Name, this);
      this.SDB.OnPlay += () => { System.Windows.MessageBox.Show("OnPlay event fired!"); };
    }
  }
}
  • Add an autoscript-to mediamonkey (ie. a file in ...\MediaMonkey\Scripts\Auto) named SomeScript.vbs that starts your application and runs the Init function. It's contents should be like this:
Sub OnStartup
   Set o = CreateObject("SomeNamespace.EventTest")
   o.Init(SDB)
End Sub
  • When you now start MediaMonkey it will connect to your application and event firing will work.

Links