高手快来,特难的!!!!!!! 300分大送!!!!!!(300分)

  • 主题发起人 主题发起人 netwinds
  • 开始时间 开始时间
N

netwinds

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个功能,实现如 winzip 8.0的功能,点击*.zip文件后,右键菜单弹出,里面
有一个对应的选项,这个选项还有一级子菜单项的,要怎么处理呢???

还有如 Norton Antivirus 2002 的功能,在 Windows 的窗口右上角加了一个菜单的,
请问怎么做!
 
查一下这里的文章,我记得是有的
 
写钩子函数
查HOOK有一大堆贴子
 
有没有谁有例子程序呢?给一个嘛!我找不到
 
没人可以帮忙吗???????
 

PopupMenu
 
用写注册表的方法。
 
你说的第一项是扩展Shell的功能,我在《Delphi 5 开发人员指南》(机械工业出版社)上
看到过有关论述,由于没有亲自去实践,所以现在忘记了。你可以去看看那本书(好像是靠
后的几章)就会了。
 
EASY!!!
YOU CAN DO IT YOURSELF
DON'T WASTE YOUR SCORES.
 
Shell的功能,调用 Shell的API函数,可以实现
 
《Delphi 5 开发人员指南》24.4.3章-上下文菜单处理器
上下文菜单处理器能够针对某种类型的文件对象加入上下文菜单项
上下文菜单外壳扩展实现了I S h e l l E x t I n i t接口和I C o n t e x t M e n u接口。这里,我们将针对B o r l a n d
Package Library(BPL)文件来实现这两个接口。通过提供上下文菜单,使用户可以获取B P L文件的信息。
下面要创建的上下文菜单对象叫T C o n t e x t M e n u。就像复制钩子处理器一样, T C o n t e x t M e n u也是从
T C o m O b j e c t派生下来的。
........................................
 
写好外壳扩展程序后,然后将它们注册生效,调用 Shell的API函数。
所有的外壳扩展都必须在Windows注册表的HKEY_CLASSES_ROOT/CLSID键之下进行注册。
在该键下面可以找到许多名字像{0000002F-0000-0000-C000-000000000046}的键,
这类键就是全局唯一类标识符。每一个外壳扩展都必须有一个全局唯一类标识符,
Windows正是通过此唯一类标识符来找到外壳扩展处理程序的。在类标识符之下的
InProcServer32子键下记录着外壳扩展动态链接库在系统中的位置。与某种文件类型
关联的外壳扩展注册在相应类型的shellex主键下。如果所处的Windows操作系统
为Windows NT,则外壳扩展还必须在注册表中的
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/ShellExtensions/Approved主键下登记。

上面提到的在Windows Explore中在鼠标右键菜单中添加菜单项(我们成为上下文相关菜单)
的操作属于外壳扩展的第一类,即Context menu handlers向特定类型的文件对象增添
上下文相关菜单。要动态地在上下文相关菜单中增添菜单项,可以通过写Context Menu Handler
来实现。
  
编写Context Menu Handler必须实现IShellExtInit和IContextMenu两个接口。
除了IUnknown接口所定义的函数之外,Context Menu Handler还需要用到
QueryContextMenu、InvokeCommand和GetCommandString这三个非常重要的成员函数。
 
第一个问题我自己解决了,第二个问题呢?谁能帮我,分数照样送哦!!!!!!!
 
怎么没人来回答我啊?????
 
天,我也知道COM接口啊,但我不知怎么做,能给例子代码的到哪去了?帮个忙嘛!!
 
Shell 扩展,自己去找资料看看,做起来不难
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure SystemMenuCommand(var Msg:TWMMENUSELECT);
message WM_SysCommand;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置系统菜单
AppendMenu(GetSystemMenu(Handle,False),MF_SEPARATOR,0,'');
AppendMenu(GetSystemMenu(Handle,False),MF_STRING,200,'前端显示(&A)');
end;

procedure TForm1.SystemMenuCommand(var Msg:TWMMENUSELECT);
begin
if Msg.IDItem = 200 then
begin
if Form1.FormStyle = fsNormal then
begin
// 将窗体设置为总在前端显示
Form1.FormStyle := fsStayOnTop;
// 重新设置系统菜单
AppendMenu(GetSystemMenu(Handle,False),MF_SEPARATOR,0,'');
AppendMenu(GetSystemMenu(Handle,False),MF_STRING,200,'前端显示(&A)');
// 在新添加的菜单项前增加一个选中标志
ModifyMenu(GetSystemMenu(Handle,False),200,MF_CHECKED,200,'前端显示(&A)');
end
else
begin
// 将窗体设置为普通模式
Form1.FormStyle := fsNormal;
// 重新设置系统菜单
AppendMenu(GetSystemMenu(Handle,False),MF_SEPARATOR,0,'');
AppendMenu(GetSystemMenu(Handle,False),MF_STRING,200,'前端显示(&A)');
end;
end;

inherited;
end;
end.
 
to
odbc1230

不对啊,我是要在 explorer 的窗体上加上菜单啊。就象蚂蚁有IE按钮栏上加上一个图
标一下,我要在 explorer 的窗体上加上一个菜单的。但是加在地址栏那一列的。

你看一个 norton 2002就知道了
 

Similar threads

回复
0
查看
804
不得闲
D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部