Zune Now Playing support for Digsby and Winamp-compatible nowplaying software.
The Zune media player delivers Now Playing information to Windows Live Messenger, but other software isn’t able to pick up these messages. Quite a few users have asked for Zune Now Playing support in Digsby, so I put together this little app that lets this work. The application itself is generic, converting Zune now playing messages into the more widely implemented Winamp now playing method.
Download the executable and source (C++).
Code Listing:
#include "stdafx.h" #include "ZuneNowPlaying.h" #include "LimitSingleInstance.h" // KB243953 #include <regex> const std::tr1::wregex pattern(L".*?\\\\0Music\\\\0.*?\\\\0.*?\\\\0(.*?)\\\\0(.*?)\\\\0"); CLimitSingleInstance g_SingleInstanceObj(L"{24F3CD83-9FFE-4DE6-951D-63958942F834}"); HWND hWndWinamp; HWND hWndWindowsLiveMessenger; LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COPYDATA: { COPYDATASTRUCT *cds = (COPYDATASTRUCT*)lParam; wchar_t *str = (wchar_t*)cds->lpData; std::tr1::wcmatch result; if(std::tr1::regex_search(str, result, pattern)) { std::wstring ret = result[2].str() + L" - " + result[1].str(); SetWindowText(hWndWinamp, ret.c_str()); } else { SetWindowText(hWndWinamp, L""); } break; } case WM_DESTROY: PostQuitMessage(0); break; case WM_USER: if (lParam == 104) { return 1; // Winamp=Playing (always) } } return DefWindowProc(hWnd, message, wParam, lParam); } void RegisterClasses(HINSTANCE hInstance) { WNDCLASSEX wcex = WNDCLASSEX(); wcex.cbSize = sizeof(WNDCLASSEX); wcex.lpfnWndProc = WndProc; wcex.hInstance = hInstance; wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszClassName = L"MsnMsgrUIManager"; RegisterClassEx(&wcex); wcex.lpszClassName = L"Winamp v1.x"; RegisterClassEx(&wcex); } bool CreateWindows(HINSTANCE hInstance) { // Pretend to be Windows Live Messenger, so WM_COPYDATA messages are sent to us. hWndWindowsLiveMessenger = CreateWindow(L"MsnMsgrUIManager", L"", WS_DISABLED, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); // Pretend to be Winamp (any version), so apps will pick us up for Now Playing. hWndWinamp = CreateWindow(L"Winamp v1.x", L"", WS_DISABLED, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); return hWndWinamp && hWndWindowsLiveMessenger; } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpCmdLine*/, int /*nCmdShow*/) { MSG msg = MSG(); if (!g_SingleInstanceObj.IsAnotherInstanceRunning()) { RegisterClasses(hInstance); if (CreateWindows(hInstance)) { while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } return (int)msg.wParam; }</regex>
How it works:
It’s pretty simple, Zune software sends a WM_COPYDATA message to a window with class name MsnMsgrUIManager, the message contains a pointer to a unicode string, that looks something like this:
ZUNE\0Music\01\0{0} - {1}\0TRACK_TITLE\0TRACK_ARTIST\0TRACK_ALBUM\0zune:ZUNE_GUID\0 // TRACK_TITLE: Title // TRACK_ARTIST: Artist // TRACK_ALBUM: Album // ZUNE_GUID: A GUID that may refer to the Zune device, Zune account, or Zune software itself. // Note: {0} - {1} is the format of how the string should be displayed in WLM - I ignore this entirely. // Note2: This method is used by other software, so I don't gate on ZUNE for the sake of maximum flexibility. // Note3: The "1" after Music specifies the playing state. 0=Stopped, 1=Playing. I ignore this and instead just use whether or not the other fields exist.
Note: The \0’s in the above string are literally \ and 0, not NULL characters.
Using a regular expression to match the fields, The artist and title are extracted from the string, and set as the window caption for a window with class name Winamp v1.x. Software (like Digsby, or other now playing apps) may use FindWindow to locate the fake Winamp player, and read the caption with GetWindowText.
You may need to install the Microsoft Visual C++ 2008 SP1 Redistributable Package (x86).
Pandora One Media Keys – Enable them!
I really enjoy Pandora – and I recently bought the upgrade to Pandora One, since I listen to it at work most of the day. Aside from the player being AIR-based, my only gripe is the lack of media key support. I’ve put together a simple application that runs in the background, redirecting media key input to the Pandora One player.
- .NET 2.0 – Windows 2000 to Windows 7
- Only the Next and PlayPause keys are mapped. The attached source code includes Like and Dislike as well.
- if the player is minimized, it will be restored, so you’ll want to keep the player behind your other windows.
- The player needs to be in the now playing state, if you’re at the list of stations, the keys won’t work.
- If you’d like to run the program at startup, create a shortcut and place it in your Startup folder, on the start menu.
Download Pandora One Media Keys. This is a tiny project, so I’m sharing the relevant parts of the source code if you’d like to do something other than map the Next and PlayPause keys.
If this app is useful to you, please donate. :)
GVNotifier 1.4.1
GVNotifier 1.4.1 is live – auto-update to get it or download here. This is a minor update, I’ve been very busy lately so this is a bugfixing release only. Notable changes include:
- Passwords are encrypted in the settings file, and in memory. This is not strong encryption, but it’s better than plain text or simple encoding.
- The old AppData directory is deleted if present (1.0-1.3)
- Crash reporter – if the app crashes, a report is automatically sent the next time you run GVNotifier.
If you’re having trouble with ClickOnce, or need files for a portable version (create a blank settings.xml file), get the standalone version. This version does not have auto-update!
GVNotifier 1.4 is live
GVNotifier 1.4 is live, with contacts sync, call history, voicemail playback, a new UI and tons of other great features. Documentation coming soon.
GVNotifier 1.4 Preview – Call History, Voicemail
I’ve been working on GVNotifier 1.4, which will be a large change and due by the end of May.
You can get a beta copy here. GVNotifier 1.4 is now live! (05/16)
The contact list has been revamped, and Windows 7 taskbar integration has finally arrived.
Google Voice SMS Automatic Responder – Free Trial!
Have you ever wanted to own your own SMS service? Directing customers to send “MSG” to 123-456-789 for more information, or set up a whole menu of options. Easily deliver customers with coupons, games, jokes or whatever else with GVAutoResponder!
GVAutoResponder turns your Google Voice account into a full-fledged business service. Easily respond to customers with automated messages, even have a default option for users that don’t already know the commands. Send mass-messages to all your customers, or just a subset that have opted into a service.
Overview
- Highly configurable and flexible rule system for generating responses
- Respond to SMS, Missed Calls and Voicemail
- Export users and messages
- Easily send messages to one, some, or all users!
- Cost-effective solution for managing one or more business Google Voice accounts
- Works alongside GVNotifier
Get GVAutoResponder
| GVAutoResponder v1.1.0.9 | Windows XP/Vista/7 | Download | Documentation (PDF) | Released May 26, 2010 |
GVAutoResponder will auto-update to the latest version if you already have it installed.
Features
GVAutoResponder runs on Windows XP/Vista/7 and monitors Google Voice for new messages. If they match the criteria you select, they’ll get a response. Using the rule editor, responses and triggers can be configured any way you like.
Send a message to one, some, or all of your users quickly with the mass-messaging features.
Export users and messages as CSV for use in excel or other applications.
Download the trial version now! A signature will be appended to each message in the trial version, but otherwise the software is the same.
Order GVAutoResponder online now!
GVAutoResponder 1.1 may be purchased for a fee of $25 (for use with one Google Voice account) or $30 (for use with multiple accounts)
Send me an email, or contact me using the widget to the right if you would like a more customized solution. Please leave your email address so I can get back in touch with you!
GVNotifier 1.2 – International calling fix
I pushed a patch today that fixes International number call/sms issues.
What is CamServer?
I added a link to CamServer on the right of the page a little while ago, but didn’t explain what CamSever is and who would want to use it. CamServer is experimental software.
CamServer is a surveillance and monitoring application for Windows and Linux that lets you easily view and record remote cameras. Simply plug one or more USB or PCI capture devices into a computer, and then view the cameras from a remote location — on the same network or over the internet. Computers running CamServer on the local network are automatically discovered, no configuration is needed!
Screenshots:
Cameras are loaded from your computer, the local network, and over the internet. CamServer nodes can host cameras for remote access. Designate one instance for external use, and view all your cameras in one place.
Record video to AVI for future playback. Cameras may be designated as public or open-access, or protected with a username/password of your choosing.
Camera feeds may include timestamp and response information.
If the connection is lost, CamServer will let you know that the device is no longer providing video.
Grab a copy of CamServer and let me know what you think!
Project Deferno
Over the past year or so, a few friends and I had been toying with the idea of a better IRC client, something with an attractive UI, HTML rendered themes, flexible features and, above all, feels like a 21st century piece of software. mIRC feels horribly dated, how much has really changed since it was run on Win95?
Project Deferno is live today, and available to anyone via ClickOnce deployment. Functionality is very limited, but development is moving quickly.
Deferno is targeted at Windows 7 with Aero, features may be limited in other configurations.
Download Project Deferno. [ClickOnce installer]
Support/Questions should be directed to irc://irc.freenode.net/#deferno
GVNotifier 1.2 – let’s get serious!
I’ve been hard at work on GVNotifier 1.2 for the last couple of weeks. Lots of bugfixes and enhancements have been added based on the great feedback I’ve had via the comments form, widget and the GVNotifier beta group.
This version adds lots of preferences–so you can use it how you like.
Check out the screenshots:

The contact list supports pinning, keep your favorite contacts just a click away. Contact photos are downloaded from Google Contacts.


The login experience has been enhanced, if you’re still unable to login, you may send a detailed error report and I can look over the logs to determine what’s happening.

Lots of preferences have been added for key features.

Quickly call or text new people without having to open a browser to Google Voice.

Easily message contacts with multiple numbers. Just click the number to choose where to send to.
GVNotifier 1.2 is available now, auto-update to the latest version if you already have it installed, or Download it here.












