在日常使用电脑的过程中,经常需要找到快捷方式(.lnk文件)指向的目标文件。通常情况下,需要右键点击快捷方式,选择“属性”,然后点击“查找目标”。这个过程虽然简单,但略显繁琐。本文将介绍如何通过编程为.lnk文件添加一个上下文菜单选项,使得用户能够更快捷地找到目标文件。
在阅读了Michael Dunn关于Shell扩展的文章后,根据他的例子编写了这个程序。文章的链接是:。
要使用这个扩展,可以通过以下两种方式之一:
在开发过程中,发现了一个奇怪的问题:有时选中的文件不会高亮显示。如果有任何线索或帮助,请不吝赐教。
2003年2月8日:修正了错误的注册表项。
2003年2月4日:首次发布。
#include <windows.h>
#include <shlobj.h>
class CMyContextMenu : public IContextMenu
{
public:
// IUnknown methods
HRESULT __stdcall QueryInterface(REFIID riid, void **ppvObject);
ULONG __stdcall AddRef();
ULONG __stdcall Release();
// IContextMenu methods
HRESULT __stdcall QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
HRESULT __stdcall InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
HRESULT __stdcall GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax);
};
HRESULT __stdcall CMyContextMenu::QueryInterface(REFIID riid, void **ppvObject)
{
// 实现IUnknown接口的QueryInterface方法
}
ULONG __stdcall CMyContextMenu::AddRef()
{
// 实现IUnknown接口的AddRef方法
}
ULONG __stdcall CMyContextMenu::Release()
{
// 实现IUnknown接口的Release方法
}
HRESULT __stdcall CMyContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
{
// 实现IContextMenu接口的QueryContextMenu方法
}
HRESULT __stdcall CMyContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
{
// 实现IContextMenu接口的InvokeCommand方法
}
HRESULT __stdcall CMyContextMenu::GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax)
{
// 实现IContextMenu接口的GetCommandString方法
}