首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么将程序添加到右键菜单中,并能向程序传递路径,程序能够提取

2013-07-04 
如何将程序添加到右键菜单中,并能向程序传递路径,程序能够提取在网上搜到这些东西,不知道下面提到的%1代表

如何将程序添加到右键菜单中,并能向程序传递路径,程序能够提取
在网上搜到这些东西,不知道下面提到的%1代表什么,ParamStr(1) 函数在什么地方什么时候使用


问题如下: 
1.如何将程序添加到右键菜单中。 
2.如何使用加入菜单的程序打开(操作)选中的文件(文件夹),文件名参数的传递。 
3.我的目的是按右键后选择该程序,后直接计算文件的内容,如同winrar一样。 
4.希望给出个简短的例子。 
谢谢大家 

怎么?这个问题很难么??? 

--------------------------------------------
关于多种环境注册右键弹出事件的方法,请按照以下对应关系:\HKEY_CLASSES_ROOT\Folder\Shell          任意文件夹 
\HKEY_CLASSES_ROOT\Directory\Shell       任意目录 
\HKEY_CLASSES_ROOT\Drive\Shell           任意驱动器 
\HKEY_CLASSES_ROOT\*\Shell               任意文件 
新建一个主键,并在主键下添加一个特定主键(command),修改command的键值指到你的应用程序。例如: 
建立\HKEY_CLASSES_ROOT\Folder\Shell\AimTest,将在Folder上按下右键时出现"AimTest"菜单 
建立\HKEY_CLASSES_ROOT\Folder\Shell\AimTest,并设定该主键的缺省值为"我的测试菜单",则将在Folder上按下右键时出现"我的测试菜单"菜单钮。 
建立\HKEY_CLASSES_ROOT\Folder\Shell\AimTest\command,并设定command"缺省"键值为"c:\tools\pse.exe" "%1",则将以Folder名为第一参数启动pse.exe。 

   * 注意command键值的双引号不可缺省另外:\HKEY_CLASSES_ROOT\Folder\Shellex 
\HKEY_CLASSES_ROOT\Directory\Shellex\HKEY_CLASSES_ROOT\Drive\Shellex 
\HKEY_CLASSES_ROOT\*\Shellex可以按应用程序在Registroy中的注册ID调用。这样可以调用.DLL和钩子函数。 
但建议按第一种方法调用应用程序,因为注册一个ID实在麻烦。如果你的应用程序支持DDE,你可以参考 
\HKEY_CLASSES_ROOT\Directory\Shell\Find键的设定来进行DDE设置。 

来源于葵花宝典 

--------------------------------------------
Uses Registry 


var 
reg:TRegistry; 

begin 
reg:=TRegistry.Create; 
try 
Reg.RootKey:=HKEY_CLASSES_ROOT; 
Reg.CreateKey('\txtfile\shell\用我的记事本打开(&C)\command'); 
If Reg.OpenKey('txtfile\shell\用我的记事本打开(&C)\command', true) then 
Reg.WriteString('',Extractfilepath(Application.ExeName)+Extractfilename(Application.ExeName)+' "%1"'); 
finally 
   Reg.Free; 
end; 

--------------------------------------------
var 
 Reg:TRegistry; 
 Key1,Key2:String; 
begin 
 Reg:=TRegistry.Create; 
 try 
   Reg.RootKey:=HKEY_CLASSES_ROOT; 
   Key1:='\icofile\Shell\用 PicView 浏览'; 
   Key2:='\Jpegfile\Shell\用 PicView 浏览'; 
   if Add_Del then   //add_del 是说是否向注册表中添加信息的意思, 
   begin{Add} 
     Reg.OpenKey(Key1+'\Command',True); 
     Reg.WriteString('',Application.ExeName+' "%1"');//写上程序的地址 
     Reg.OpenKey(Key2+'\Command',True); 
     Reg.WriteString('',Application.ExeName+' "%1"'); 
   end else 
   begin{Delete}  //去掉文件关联 
     Reg.OpenKey(Key1+'\Command',True); 
     Reg.DeleteKey(Key1); 
     Reg.OpenKey(Key2+'\Command',True); 
     Reg.DeleteKey(Key2); 
   end; 
   Reg.CloseKey; 
 finally 
   Reg.Free; 
end; 

http://www.hongen.com/pc/pcketang/jiqiao/win98zcb/zhuce013.htm 

http://tech.sina.com.cn/c/2002-01-16/8472.html 

--------------------------------------------


好的,我的第2个问题:我是不知道如何在程序中处理(接收)参数“1%” 
我在程序中如何才能得到这个参数呢? 

--------------------------------------------
你在什么程序你接受参数“1%” 

--------------------------------------------
命令行参数:ParamStr(1) 

简单的对个别扩展名加入菜单命令如上就可以了 
更进一步的功能须用到外壳扩展了 
[解决办法]
注册表中的%1为系统默认变量
%1                              表示程序操作的文件

%2                                表示系统默认的打印机

%3                                      表示资料扇区

%4                                    表示操作的Port 端口
------------------------------------
ParamStrhttp://apps.hi.baidu.com/share/detail/16669076有详细介绍
[解决办法]
paramstr(1)='123' paramstr(2)='456' paramstr(3)='789'
用shellexecute的话可以在parameters参数位置输入值。不同的参数值之间用空格隔开
如 shellexecute(application.Handle,'open','project4.exe','123 456', 'e:\',SW_SHOW);
所以用paramstr可以在应用程序间进行数据传输。
[解决办法]
paramstr取启动的参数,比如,一般我们启动外部exe时,是这样
winexec('d:\1.exe',sw_shownormal);

但有些程序,要启动参数,那就是类似这样
winexec('d:\a.exe 1 3 5',sw_shownormal);

则在a的Create事件,用paramstr接收这些参数了
paramstr(1) 就是1
paramstr(2) 就是3
paramstr(3) 就是5
[解决办法]
你需要在程序截获%1 也就是文件路径之前做一个打开动作!//获取右键打开传入参数
CString strcmd=AfxGetApp()->m_lpCmdLine;
//判断有无参数传入
if (strcmd!="")
{
//去掉获取路径的引号
strcmd.Replace(_T("""),"");
openfrist(strcmd);
SetDlgItemText(IDC_EDIT_FILE_PATH,strcmd);
UpdateData(FALSE);

}

引用:
我在HKEY_CLASSES_ROOT\*下建立了shell\我的测试项,然后建立了command子项,值为"D:\tools\jpgcompact.exe %1",右击任意文件能出现我的测试菜单,但是点击后并不打开程序,怎么回事,弹出个菜单说没有程序与之关联,让我到控制面板设置

热点排行