Some time ago, we used C++ to query information from the ShellWindows object and found it straightforward but cumbersome.

This is rather clumsy from C++ because the ShellWindows object was designed for use by a scripting language like JScript or Visual Basic.

Let's use one of the languages the ShellWindows object was designed for to enumerate all the open shell windows. Run it with the command line cscript sample.js.

var shellWindows = new ActiveXObject("Shell.Application").Windows();
for (var i = 0; i < shellWindows.Count; i++) {
  var w = shellWindows.Item(i);
  WScript.StdOut.WriteLine(w.LocationName + "=" + w.LocationURL);

Well that was quite a bit shorter, wasn't it!