65.9K
CodeProject 正在变化。 阅读更多。
Home

为 Windows 98 打开包含文件夹

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (4投票s)

2002 年 7 月 22 日

1分钟阅读

viewsIcon

72446

downloadIcon

1038

在 Windows 98 查找:文件和文件夹引擎中查找文件的 Shell 扩展

Open Containing folder

动机

我过去经常在 Windows 98 上工作,一直觉得它缺少 Windows 2000、ME 和 XP 上的一些功能。此功能允许为这些操作系统版本上的 MS 搜索引擎找到的任何项目打开包含文件夹。我修改了 Michael Dunn 在他的 编写 Shell 扩展的完全傻瓜指南 - I 中提供的代码,以便为 Windows 98 也启用此功能。

工作原理

  1. 此上下文菜单处理程序针对任何 Shell 对象启用,并在鼠标右键单击时调用。
  2. 如果当前活动窗口的标题以 Find: 开头 - Explorer 将初始化我们的扩展并调用 IContextMenu 方法。
  3. 由于我们实现了 InvokeCommand() - ShellExecute(...) API 来运行 explorer.exe 以选择该项目(文件或文件夹)。对于此特定任务,我们可以使用 explorer.exe 支持的命令行模板:/select,full_path_to_file。有关使用这些参数的详细说明,请参阅 MSDN Q152457

再次说明,大部分代码已经由 Mike 提供了,所以你只需要修改他的一些代码即可。

这些行需要添加到 Initialize() 方法的实现中...

    ...
    ...
    HWND	hActiveWnd	= ::GetActiveWindow();
    TCHAR	szFindWnd[]	= "Find:";
    TCHAR	szCaption[MAX_PATH];
    GetWindowText(hActiveWnd, szCaption, sizeof(szFindWnd));
	
    if (0 != lstrcmp(szCaption, szFindWnd))
		hr = E_INVALIDARG;
    ...
    ...		

修改 QueryContextMenu() 方法的实现以插入适当的菜单项...

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

这些行需要修改在 InvokeCommand() 方法的实现中...

    ...
    ...
    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;
    }
    ...
    ...		

你可能需要将此处理程序注册到 Windows Shell 对象 Folder,以便也为文件夹启用此功能。

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

此处理程序仅对 Windows 98 有效,因为其他版本使用修改后的引擎来运行搜索。尽情享受吧!

© . All rights reserved.