Running IShellLinks

ilmcuts <[email protected]> Tue, 01 Mar 2005 14:23:35 +0100
Newsgroups gmane.comp.windows.shell-shocked.devel
Message-ID <[email protected]>
Hey all,

I have written a few functions which read and register the hotkeys that 
.lnk files allow you to specify. Basically the program gets the 
IShellFolder of the specified root and enumerates all of its elements. 
Whenever it encounters a link, it gets its IShellLink interface and asks 
for its hotkey. If it exists it is registered.

The question is, how should the link be invoked later on? Should the 
IShellLink be stored, or maybe the PIDL? Currently I use a function 
which does the following:

     SHELLEXECUTEINFO sei = { 0 };
     sei.cbSize = sizeof(sei);
     sei.fMask = SEE_MASK_IDLIST;
     sei.lpIDList = pidl;
     sei.lpVerb = _T("open");
     sei.nShow = SW_SHOWNORMAL;

     ShellExecuteEx(&sei);

It obviously uses the PIDL. It works but still has a few drawbacks. For 
example, it doesn't set sei.dwHotkey appropriately. SW_SHOWNORMAL isn't 
right either, it should use IShellLink::GetShowCmd.

Do I have to get all that from IShellLink, or is there a function which 
encapsulates that? In short, is there a function to execute IShellLinks? 
Is ShellExecuteEx the way to go? Or what about 
IContextMenu::InvokeCommand? I want a function which uses all of the 
information IShellLink provides to launch the application that is linked to.

ilmcuts

__________________________________________________
Subscription options and archive:
http://www.freelists.org/list/shell-coding