Adding a reference to MediaMonkey: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 11: | Line 11: | ||
==Subscribing to events== | ==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: | |||
* [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] | |||
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] | |||
===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: | |||
<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
- Choose Add Reference
- Go to the COM Tab
- 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.