Well- I've decided that Scanning functionality is "easy" enough to add without changing code by editing the MENU XML files- it surely isn't worth the effort for me to re-learn IDL just to define that blasted interface- last time I tried that was for that IDispatchEx, and needless to say that didn't work very well.
In any case, I have successfully implemented the "custom" Open with dialog, shown when file that aren't in the same folder are right-clicked... or, that will be the idea, now it shows it for any multiple-selection right-click.
The "open with", information, much to my amusement, is stored quite plainly in the registry.
using the file extension of the selected file(s), or * if they don't have a common extension, the routine looks at HKEY_CLASSES_ROOT for that extension, and enumerates the openwithList key, which contains sections that are simply the names of Executables. Additionally it opens the Openwithprogids() and recursively calls itself for those progids found (for example, on my computer ".AIF" has openWithprogIds that reference both AIFFILE as well as an acdsee progid, both of which are also present under hkey_classes_root.
Now armed with a list of Program executable names, I was faced with the task of converting them to absolute paths.
thankfully, the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths key contained all the data I needed (except that mspaint is referenced as pbrush... so that doesn't work...), and I am able to successfully convert it into a full file path.
And then I simply duplicate what was already present for my "Send To" code- IE execute the program and pass along all the files as arguments.
Sorry for the nitty gritty there, I thought it was a convoluted and ridiculously roundabout way of doing things. And of course I had to convert the names to "friendly" names, so I had to use the FileInformation routines with raw buffers. quite messy, but you can't really tell just by looking at it...