Browsing all articles from September, 2010

MusicBee

IF YOU DONT CARE ABOUT WHAT HAPPENED AND JUST WANT THE PLUGIN CLICK HERE
So i have recently switched over to the wonderful musicBee ( www.getmusicbee.com ), phenomenal application, nearly amarok for windows :) Some of the features i like:

  • Quick search (type in the search bar, library adjusts by searching all available fields intelligently)
  • Notifications across MSN and Last.fm and the like
  • Fantastic tagging per track and per album
  • Downloading of art and lyrics
  • Looks good :P

One of the features i have always used in my previous media players has been the now-playing-plugin for mIRC which i use on this machine.

Unfortunately i could not find any for musicBee, so yesterday i took a few hours to figure out how to make one.Let me preface this section by saying the last time i coded C++ was around 5 years ago at university, so i could be horribly wrong for some of this, but i’m just saying what i saw – also if the code is horrid, well, atleast it works :)

mIRC and DLLs


Essentially mIRC communicates with dll’s by calling the DLL ( which you specify ), the function within the DLL and some data that is sent from mIRC as per the documentation (mIRC help) the function looks as follows:

The routine in the DLL being called must be of the form:
int __stdcall procname(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)

*my function was showSong

All DLLs also require a sort of reference file that tells mIRC exactly what functions are available like so:

LIBRARY "musicBeePlugin"
EXPORTS
showSong @ 1

* showSong is the function i created

Essentially i followed this guide to get setup, fantastic little how-to setup a mIRC plugin in VC++: http://purplespore.com/main/?p=46 and for just the guide: http://purplespore.com/main/wp-content/uploads/2008/10/mytutorial3.html

MusicBee and Songs



So after doing that i noticed that musicBee displays the current artist and song within the window title ie:

Alt Tab  - MusicBee

Alt Tab - MusicBee

Code



So now i just had to write some simply code to go through all the currently available windows and then find the one that matches “MusicBee”. Sure i could have used regular expressions, but i didnt wanna push my very limited C++ skills to get this done by overcomplicating something. None the less the code looks like this:

#include <windows.h>
#include <string>
using namespace std;
string finaldata = "";

BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)
{
   char buff[255];
   if (!hWnd)
   {
      return TRUE; // Not a window
   }
   if (!::IsWindowVisible(hWnd))
   {
      return TRUE; // Not Visible?
   }
   GetWindowText(hWnd, buff, 255);
   string windowTitle = buff;
   string windowToFind = "- MusicBee";
   basic_string <char>::size_type titlePos;
   titlePos = windowTitle.find(windowToFind);
   if(titlePos != string::npos)
   {
      finaldata += windowTitle.substr(0,titlePos);
   }
   return TRUE;
}

int __stdcall showSong(HWND mWnd,HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
{
   EnumWindows(MyEnumProc, 0);
   strcpy(data,finaldata.c_str());
   return 3;
}

Some of the things that had me stuck:

SWITCH YOUR APP TO MULTIBYTE SUPPORT or you cannot use the char within GetWindowText — to do this:

  • Select project (not solution)
  • Project->properties
  • Character set->Use Multibyte Character Set
projectProperties

VC++ Project Properties

Download and Use



musicBeePlugin for mIRC — download .zip

Extract the above zip into your mirc directory, and add this to the alias file ( alt + r, click Aliases ).

/F4 //me is listening to: $dll(“musicBeePlugin.dll”,showSong,a) [ MusicBee ]

You can then press F4 to have your song playing:

mIRC with nowPlaying and Aliases

mIRC with nowPlaying and Aliases

Recent Posts

What?

Not the quickest of cats
on the best of days.

Tag cloud

Donate

For electronics/other to play with:



Archives