为 Windows 98 打开包含文件夹






4.80/5 (4投票s)
2002 年 7 月 22 日
1分钟阅读

72446

1038
在 Windows 98 查找:文件和文件夹引擎中查找文件的 Shell 扩展
动机
我过去经常在 Windows 98 上工作,一直觉得它缺少 Windows 2000、ME 和 XP 上的一些功能。此功能允许为这些操作系统版本上的 MS 搜索引擎找到的任何项目打开包含文件夹。我修改了 Michael Dunn 在他的 编写 Shell 扩展的完全傻瓜指南 - I 中提供的代码,以便为 Windows 98 也启用此功能。
工作原理
- 此上下文菜单处理程序针对任何 Shell 对象启用,并在鼠标右键单击时调用。
- 如果当前活动窗口的标题以 Find: 开头 - Explorer 将初始化我们的扩展并调用
IContextMenu
方法。 - 由于我们实现了
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 有效,因为其他版本使用修改后的引擎来运行搜索。尽情享受吧!