如何在系统右键菜单中加入自己的菜单项和子弹出菜单。(200分)

  • 主题发起人 主题发起人 qwert70
  • 开始时间 开始时间
Q

qwert70

Unregistered / Unconfirmed
GUEST, unregistred user!
关键是如何实现子菜单。
 
在资源管理器中单击右键,弹出的系统菜单中加入自己的菜单项,大家不明白吗?
类似于Winzip,
如果只是简单地加一个菜单项,我会。
但我不知道怎么再在该系统菜单中再添加一个子菜单。
 
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=133378" target="_blank">这里有答案</a>
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/NewQ.asp?query=winzip" target="_blank">或来有答案</a>
 
进不去,你怎么链接的?
 
hexi: 你的答案我看过,不能添加子菜单牙!
 
我修改了DDHCode的一个例子,运行良好.
kxy@csdn.net 来信我发过去.
function TContextMenu.BuildSubMenu( Menu: HMENU;
IndexMenu: Integer;
var IDCmdFirst: Integer ): HMENU;
var
i: Integer;
menuItemInfo: TMenuItemInfo;
TempMenu : HMENU;
begin
if Menu = 0 then
Result := CreateMenu
else
Result := Menu;
// Build the menu items here
with menuitemInfodo
begin
cbSize := SizeOf( TMenuItemInfo );
fMask := MIIM_CHECKMARKS or MIIM_DATA or MIIM_ID or
MIIM_STATE or MIIM_SUBMENU or MIIM_TYPE;
fType := MFT_STRING;
fState := MFS_ENABLED;
hSubMenu := 0;
hbmpChecked := 0;
hbmpUnchecked := 0;
end;

for i := 0 to High( MenuCommandStrings )do
begin
menuitemInfo.dwTypeData := PChar(MenuCommandStrings[ i ]);
menuitemInfo.wID := IDCmdFirst;
InsertMenuItem( Result, IndexMenu + i, True, menuItemInfo );
Inc( IDCmdFirst );
end;
{康新勇添加}
menuitemInfo.dwTypeData := 'Test SubMenu';
menuitemInfo.wID := IDCmdFirst;
menuitemInfo.hSubMenu := CreatePopupMenu;
TempMenu := menuitemInfo.hSubMenu;
InsertMenuItem( Result , IndexMenu + i, True, menuItemInfo );
Inc( IDCmdFirst );
menuitemInfo.dwTypeData := 'Open Notpad';
menuitemInfo.wID := IDCmdFirst;
menuIteminfo.hSubMenu := 0;
InsertMenuItem( TempMenu, IndexMenu + i, True, menuItemInfo );
Inc( IDCmdFirst );
{ menuitemInfo.dwTypeData := 'Open Nodpad';
menuitemInfo.wID := IDCmdFirst;}
end;

function TContextMenu.InvokeCommand( var lpici:
TCMInvokeCommandInfo ): HResult;
var
idCmd: UINT;
begin
if HIWORD( Integer(lpici.lpVerb) ) <> 0 then
Result := E_FAIL
else
begin
idCmd := LOWORD( lpici.lpVerb );
Result := S_OK;
case idCmd of
0:
ShellExecute( GetDesktopWindow, nil, SW_PATH,
PChar('"' + FFileName + '"'), nil, SW_SHOW );
1:
ShellExecute( GetDesktopWindow, nil, SW_PATH,
PChar('/P "' + FFileName + '"'), nil, SW_SHOW );
3 : ShowMessage('OK');
// 康新勇
else
Result := E_FAIL;
end;
end;
end;
 
时间太久,强制结束。 wjiachun
 
后退
顶部