Trouble logging into GVNotifier or GVAutoResponder?
Open your browser to Google Voice. Log out if you’re already logged in, and then log back in. Accept the new privacy policy, and you’ll be good to go.
Google’s new privacy policy interrupt is blocking the login process.
2 CommentsGVNotifier update – 2-step verification, multi-account sign-in, Worldwide support, 85% less bandwidth, near-realtime
As of 1.4.3.176 I’ve re-implemented the following:
- 2-step verification. Login with your Google account password and you’ll be prompted for a PIN every 30 days.
- Multiple-account sign-in.
- non-USA support.
- 85% less bandwidth! Not quite the sipper it would be if we had XMPP, but approximately 35MB over 24hrs.
- Polling time halved – messages should come in really fast now.
Let me know if anything isn’t working, I’ve been testing with several accounts and some proxies outside of the USA. It seems quite robust now.
10 CommentsGVNotifier 1.4.2.70 & GVAutoesponder 1.1.0.22 released
Emergency fix today, a RegEx I was using started to hang, causing excess CPU usage and failure to download new messages.
- API Upgrade
- Lower bandwidth consumption (but much more improvement to come)
- More bugs :)
I’ll drop another update later this week, timestamps are less accurate (or downright wrong), among other issues.
1 CommentUPDATED: Send to WP7 offline temporarily
I’m taking the Send to WP7 service offline until I can resolve a potential brute force concern.
Update: And we’re back! Sorry about that.
Leave a CommentProgrammatically (or Command Line) change the default sound playback device in Windows 7
This post sums up the information found here.
Microsoft kept the API which changes the default sound playback device closed, for good reason. Drivers and control applet applications from different manufactures would mostly certainly end up ‘fighting’ over the default device, which would be terribly confusing and effectively makes the hardware incompatible. There are legitimate reasons for one to wish to change the default playback device from the command line or programmatically, but the needs are generally isolated to a single user or a group of users looking for something highly specialized. A friend of mine needed just this kind of solution for switching from headphones to speakers (without clicking a few times and without opening new windows).
I’ve simply wrapped the information in the aforementioned MSDN thread into a console application. The application uses undocumented API; while it works on Windows Vista and Windows 7, is it very likely to become broken with the next version of Windows. This isn’t something you can rely on.
Here is the undocumented and private COM interface which is used by mmsys.cpl to interact with the Audio service (credit goes to EreTIk obviously):
// ---------------------------------------------------------------------------- // PolicyConfig.h // Undocumented COM-interface IPolicyConfig. // Use for set default audio render endpoint // @author EreTIk // ---------------------------------------------------------------------------- #pragma once interface DECLSPEC_UUID("f8679f50-850a-41cf-9c72-430f290290c8") IPolicyConfig; class DECLSPEC_UUID("870af99c-171d-4f9e-af0d-e63df40c2bc9") CPolicyConfigClient; // ---------------------------------------------------------------------------- // class CPolicyConfigClient // {870af99c-171d-4f9e-af0d-e63df40c2bc9} // // interface IPolicyConfig // {f8679f50-850a-41cf-9c72-430f290290c8} // // Query interface: // CComPtr[IPolicyConfig] PolicyConfig; // PolicyConfig.CoCreateInstance(__uuidof(CPolicyConfigClient)); // // @compatible: Windows 7 and Later // ---------------------------------------------------------------------------- interface IPolicyConfig : public IUnknown { public: virtual HRESULT GetMixFormat( PCWSTR, WAVEFORMATEX ** ); virtual HRESULT STDMETHODCALLTYPE GetDeviceFormat( PCWSTR, INT, WAVEFORMATEX ** ); virtual HRESULT STDMETHODCALLTYPE ResetDeviceFormat( PCWSTR ); virtual HRESULT STDMETHODCALLTYPE SetDeviceFormat( PCWSTR, WAVEFORMATEX *, WAVEFORMATEX * ); virtual HRESULT STDMETHODCALLTYPE GetProcessingPeriod( PCWSTR, INT, PINT64, PINT64 ); virtual HRESULT STDMETHODCALLTYPE SetProcessingPeriod( PCWSTR, PINT64 ); virtual HRESULT STDMETHODCALLTYPE GetShareMode( PCWSTR, struct DeviceShareMode * ); virtual HRESULT STDMETHODCALLTYPE SetShareMode( PCWSTR, struct DeviceShareMode * ); virtual HRESULT STDMETHODCALLTYPE GetPropertyValue( PCWSTR, const PROPERTYKEY &, PROPVARIANT * ); virtual HRESULT STDMETHODCALLTYPE SetPropertyValue( PCWSTR, const PROPERTYKEY &, PROPVARIANT * ); virtual HRESULT STDMETHODCALLTYPE SetDefaultEndpoint( __in PCWSTR wszDeviceId, __in ERole eRole ); virtual HRESULT STDMETHODCALLTYPE SetEndpointVisibility( PCWSTR, INT ); }; interface DECLSPEC_UUID("568b9108-44bf-40b4-9006-86afe5b5a620") IPolicyConfigVista; class DECLSPEC_UUID("294935CE-F637-4E7C-A41B-AB255460B862") CPolicyConfigVistaClient; // ---------------------------------------------------------------------------- // class CPolicyConfigVistaClient // {294935CE-F637-4E7C-A41B-AB255460B862} // // interface IPolicyConfigVista // {568b9108-44bf-40b4-9006-86afe5b5a620} // // Query interface: // CComPtr[IPolicyConfigVista] PolicyConfig; // PolicyConfig.CoCreateInstance(__uuidof(CPolicyConfigVistaClient)); // // @compatible: Windows Vista and Later // ---------------------------------------------------------------------------- interface IPolicyConfigVista : public IUnknown { public: virtual HRESULT GetMixFormat( PCWSTR, WAVEFORMATEX ** ); // not available on Windows 7, use method from IPolicyConfig virtual HRESULT STDMETHODCALLTYPE GetDeviceFormat( PCWSTR, INT, WAVEFORMATEX ** ); virtual HRESULT STDMETHODCALLTYPE SetDeviceFormat( PCWSTR, WAVEFORMATEX *, WAVEFORMATEX * ); virtual HRESULT STDMETHODCALLTYPE GetProcessingPeriod( PCWSTR, INT, PINT64, PINT64 ); // not available on Windows 7, use method from IPolicyConfig virtual HRESULT STDMETHODCALLTYPE SetProcessingPeriod( PCWSTR, PINT64 ); // not available on Windows 7, use method from IPolicyConfig virtual HRESULT STDMETHODCALLTYPE GetShareMode( PCWSTR, struct DeviceShareMode * ); // not available on Windows 7, use method from IPolicyConfig virtual HRESULT STDMETHODCALLTYPE SetShareMode( PCWSTR, struct DeviceShareMode * ); // not available on Windows 7, use method from IPolicyConfig virtual HRESULT STDMETHODCALLTYPE GetPropertyValue( PCWSTR, const PROPERTYKEY &, PROPVARIANT * ); virtual HRESULT STDMETHODCALLTYPE SetPropertyValue( PCWSTR, const PROPERTYKEY &, PROPVARIANT * ); virtual HRESULT STDMETHODCALLTYPE SetDefaultEndpoint( __in PCWSTR wszDeviceId, __in ERole eRole ); virtual HRESULT STDMETHODCALLTYPE SetEndpointVisibility( PCWSTR, INT ); // not available on Windows 7, use method from IPolicyConfig };
We simply enumerate the devices and choose one via the command line:
#include "stdio.h" #include "wchar.h" #include "tchar.h" #include "windows.h" #include "Mmdeviceapi.h" #include "PolicyConfig.h" #include "Propidl.h" #include "Functiondiscoverykeys_devpkey.h" HRESULT SetDefaultAudioPlaybackDevice(LPCWSTR devID) { IPolicyConfigVista *pPolicyConfig; ERole reserved = eConsole; HRESULT hr = CoCreateInstance(__uuidof(CPolicyConfigVistaClient), NULL, CLSCTX_ALL, __uuidof(IPolicyConfigVista), (LPVOID *)&pPolicyConfig); if (SUCCEEDED(hr)) { hr = pPolicyConfig->SetDefaultEndpoint(devID, reserved); pPolicyConfig->Release(); } return hr; } // EndPointController.exe [NewDefaultDeviceID] int _tmain(int argc, _TCHAR* argv[]) { // read the command line option, -1 indicates list devices. int option = -1; if (argc == 2) option = atoi((char*)argv[1]); HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { IMMDeviceEnumerator *pEnum = NULL; // Create a multimedia device enumerator. hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnum); if (SUCCEEDED(hr)) { IMMDeviceCollection *pDevices; // Enumerate the output devices. hr = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pDevices); if (SUCCEEDED(hr)) { UINT count; pDevices->GetCount(&count); if (SUCCEEDED(hr)) { for (int i = 0; i < count; i++) { IMMDevice *pDevice; hr = pDevices->Item(i, &pDevice); if (SUCCEEDED(hr)) { LPWSTR wstrID = NULL; hr = pDevice->GetId(&wstrID); if (SUCCEEDED(hr)) { IPropertyStore *pStore; hr = pDevice->OpenPropertyStore(STGM_READ, &pStore); if (SUCCEEDED(hr)) { PROPVARIANT friendlyName; PropVariantInit(&friendlyName); hr = pStore->GetValue(PKEY_Device_FriendlyName, &friendlyName); if (SUCCEEDED(hr)) { // if no options, print the device // otherwise, find the selected device and set it to be default if (option == -1) printf("Audio Device %d: %ws\n",i, friendlyName.pwszVal); if (i == option) SetDefaultAudioPlaybackDevice(wstrID); PropVariantClear(&friendlyName); } pStore->Release(); } } pDevice->Release(); } } } pDevices->Release(); } pEnum->Release(); } } return hr; }
You can download the application and source project. (MIT License)
My friend followed up with some .NET code to wrap it.
16 CommentsGVNotifier now supports: 2-factor authentication, multiple-account sign-in, users outside of the USA
I’ve just kicked off 1.4.1.163, which fixes the Call button which has broken over the past week, as well as updating the authentication mechanism to support:
- Two factor authentication. You’ll need to use an application-specific password
- Multiple-account sign-in. This may have worked before, but I’ve been able to nail down another “I can’t login but there’s nothing strange about my account” case.
- Clients outside of the USA should now be able to use GVNotifier, but probably not with multiple sign-in enabled on their account.
Compass app for Windows Phone 7
| As per the request of an XDA user, I’ve put together a Compass application for Windows Phone 7 that will work (for now) on Samsung phones. Windows Phone 7 device guidelines dictate that each phone must have Compass hardware, but there is not a common API through which developers can access the hardware. Samsung includes support in their platform drivers, so I’ve taken advantage of that.
As always, you can download the XAP and source code. A developer-unlocked Windows Phone is required. This app will not work on Dell, HTC or LG phones as of this posting. I have tested so far on the Samsung Focus, I suspect it will work on all Samsung Windows Phones. |
![]() |
Change Accent colors on Windows Phone 7 Samsung, LG, HTC devices
| After seeing this thread at XDA, I’ve put together a quick accent color changer for Samsung (and now HTC and LG) devices running Windows Phone 7.
The app simply lets you edit the name and color value for all 10 of the installed accent colors. Simply edit the color, and then switch your theme in the Settings app for the changes to take effect. There’s a button to reset the theme to default. You can download the XAP which will work on any Samsung, LG or HTC Windows Phone 7 that is developer unlocked. The source code may also be downloaded. Update: I’ve added the ability to restore default colors. |
![]() |
![]() |
![]() |
LED Flashlight for Windows Phone 7
| Windows Phone 7 is a fantastic platform, but for me there was one feature I just could not live without – the LED flashlight that I loved so much from iPhone 4. The API in the Windows Phone 7 SDK does not allow one to interface with the LED, nor does it allow you to interface with the Camera. I was able, however, to enable a functional flashlight by utilizing the APIs inside Microsoft.Phone.Media.Extended.
This app simply turns on the video camera, and the flash, but does not show the video, or save it to your Zune library. The unfortunate limitation of this is that you’ll hear a chirp sound when you turn the LED on. I can live with this, since the functionality gained outweighs the quirks. I posted about this on XDA, but this version does NOT leak videos. Upon starting up, all videos in the IsolatedStorage for this application are removed, your phone won’t fill up with leaked videos, but the versions on XDA will. |
![]() |
Download LED Flashlight for Windows Phone 7. A developer-unlocked or otherwise “Homebrew enabled” Windows Phone is required. The app is very simple, but here’s the source code anyway.
10 CommentsSend to WP7 Desktop & Send to WP7 Opera Extension
I’ve been working on two projects related to Send to WP7:
Update: The Opera extension is ready, you can pick it up on the product page.
Neither are ready for prime-time, but both are functional. The desktop client will check for updates automatically, the Opera extension will be featured on the product page when it is configured with the ability to update. I’ve put both of these on twitter, so thought I’d mention them here.
15 Comments







