Connecting to a WPD device in C#

This is the C# equivalent of an earlier C++ post on connecting to a WPD device. We’ll concentrate on the implementation here – you may refer back to that earlier post for further explanation. // Create our client information collection PortableDeviceApiLib.IPortableDeviceValues pValues = (PortableDeviceApiLib.IPortableDeviceValues) new PortableDeviceTypesLib.PortableDeviceValuesClass(); // We have to provide at the least our name,…

3

Marshalling variant properties in C#

This post is a continuation of the one covering WPD property retrieval in C#. That post explained how to marshal strings and the basic int properties. Handling other types such as VT_DATE and VT_BOOL is trickier so I’ll try to cover them here. VT_DATE VT_DATE variants hold the date time value in a field of type…

3

WPD Content Enumeration in C#

WPD content enumeration in C# is pretty close to the C++ style. Here’s a basic example that enumerates the object IDs of the objects present on the device. static void Enumerate( ref PortableDeviceApiLib.IPortableDeviceContent pContent, string parentID, string indent) { // // Output object ID // Console.WriteLine(indent + parentID); indent += ” “; // // Enumerate…

0

Setting WPD properties in C#

Since setting a WPD property requires manipulating a PROPVARIANT structure through interop, we must make use of the marshalling rules we set in our last post. We’ll take a look at a function that allows string properties to be set. static void SetStringValue( PortableDeviceApiLib.PortableDeviceClass pPortableDevice, string objectID, ref PortableDeviceApiLib._tagpropertykey propKey, string newValue) { // //…

0

WPD property retrieval in C#

WPD property values are retrieved as PROPVARIANTs through the WPD API. Unfortunately there is no native support for PROPVARIANTs in C#. To correctly retrieve the property values (or anything that is in a PROPVARIANT) through the WPD API in C#, we must use marshalling. PortableDeviceApiLib.tag_inner_PROPVARIANT is the data-type exposed through the WPD Interop layer. This…

9

Where are the WPD property keys in C#?

If you followed the exercise from our first C# post, you must have noticed that the PortableDeviceApi and PortableDeviceTypes typelibs don’t expose the WPD property keys such as WPD_OBJECT_ID, WPD_OBJECT_FORMAT, etc. This can be a major blocker since for starters, we need to specify a basic set of client information properties to open a connection to…

4

Flying Wiimotes

I just bought a Wii and it has totally changed my gamer attitude, and I wasn’t even a gamer to start with. No more button mashing anymore – arm-swinging and flailing with some actual hand-eye coordination is what it’s all about. Of course with all the arm-thrashing, the controllers are bound to gain critical velocity and…

1

Enumerating WPD devices in C#

Let’s take a look at how we can enumerate WPD devices in C#. This post assumes that you already have a project set up using these instructions. (Update: You will also need to follow the disassembly/reassembly instructions below for this to work correctly.) static void Main(string[] args) { // // Get an instance of the…

21

C# and the WPD API

There currently is no managed/C# flavor of the WPD API. This, of course, doesn’t mean that you are locked out from using the WPD API if you want to use C#. Since the API is a set of COM interfaces, we simply have to interop across from C#. Granted it isn’t as easy as a…

3