[shell-coding] Running IShellLinks

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

Other related posts: