Click here to Skip to main content
14,979,508 members
Articles / Desktop Programming / ATL
Posted 21 Jul 2002


12 bookmarked

Open Containing Folder for Windows 98

Rate me:
Please Sign up or sign in to vote.
4.80/5 (4 votes)
21 Jul 20021 min read
Shell extension invoked for files found within Windows 98 Find: Files and Folders engine

Open Containing folder


I used to work a lot on Windows 98 and had always felt that it lacked some features which were available on Windows 2000, ME and XP. This feature enables opening containing folder for any item found by MS Search engine on these OS versions. I have modified the code presented by Michael Dunn in his Complete Idiot's Guide to Writing Shell Extensions - I to enable this feature for Windows 98 too.

How It Works

  1. This context menu handler is enabled for any shell object and is invoked on mouse right-click.
  2. If current active window's caption starts with Find: - Explorer initializes our extension and calls IContextMenu methods.
  3. As we implement InvokeCommand() - ShellExecute(...) API to run explorer.exe to select this item (file or folder). For this specific task we may use command line template supported by explorer.exe: /select,full_path_to_file. For a detailed description on using these parameters refer to MSDN Q152457.

Again, most of this code had been already presented by Mike, so you may just modify some of his code.

These are the lines to be added to Initialize() method implementation ...

HWND    hActiveWnd  = ::GetActiveWindow();
TCHAR   szFindWnd[] = "Find:";
TCHAR   szCaption[MAX_PATH];
GetWindowText(hActiveWnd, szCaption, sizeof(szFindWnd));

if (0 != lstrcmp(szCaption, szFindWnd))
    hr = E_INVALIDARG;

Modify the QueryContextMenu() method implementation to insert the proper menu item...

InsertMenu(hMenu, uMenuIndex, MF_BYPOSITION, uidFirstCmd,
                             _T("Open co&ntaining folder..."));

And these are the lines to be modified in InvokeCommand() method implementation ...

if (0 == LOWORD(pCmdInfo->lpVerb))
    TCHAR   szCmdLine[MAX_PATH + 32] = "/select,";
    lstrcat(szCmdLine, m_szFile);

    ShellExecute(pCmdInfo->hwnd, _T("Open"), _T("Explorer"), szCmdLine,
                                                    NULL, SW_SHOWDEFAULT);
    return S_OK;

You may need to register this handler for windows shell object Folder to enable this feature for folders as well.

NoRemove Folder
    NoRemove ShellEx
    NoRemove ContextMenuHandlers
            ForceRemove FoundInFolder =
                                   s '{204F12AD-9B6A-11D6-B613-A43CF34AB54C}'

This handler has effect on Windows 98 only, since other versions use modified engine to run searching. Enjoy!


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Web Developer
Israel Israel
No Biography provided

Comments and Discussions

GeneralFYI: Still works properly in Win2k Pin
Paul Farry30-Jan-03 2:08
professionalPaul Farry30-Jan-03 2:08 
QuestionIsn't this on the File Menu? Pin
Simon Capewell29-Jul-02 5:07
MemberSimon Capewell29-Jul-02 5:07 
AnswerRe: Isn't this on the File Menu? Pin
byblostas29-Jul-02 12:26
Memberbyblostas29-Jul-02 12:26 
GeneralRe: Isn't this on the File Menu? Pin
Simon Capewell29-Jul-02 22:48
MemberSimon Capewell29-Jul-02 22:48 
GeneralOnly shortcuts Pin
Thomas Freudenberg22-Jul-02 2:19
MemberThomas Freudenberg22-Jul-02 2:19 
GeneralRe: Only shortcuts Pin
byblostas22-Jul-02 3:28
Memberbyblostas22-Jul-02 3:28 
GeneralRe: Only shortcuts Pin
Thomas Freudenberg22-Jul-02 4:26
MemberThomas Freudenberg22-Jul-02 4:26 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.