关于shell的,我觉得比较难 ( 积分: 200 )

  • 主题发起人 主题发起人 yuanscar
  • 开始时间 开始时间
Y

yuanscar

Unregistered / Unconfirmed
GUEST, unregistred user!
在windows上面选择一个文件,右键,会出现环境菜单,我希望实现的功能是,在获取一个文件的handle以后,能得到他的环境菜单,然后执行其中的某一个。比如,机器上安装了winrar以后,我就能获得的文件的环境菜单上关于用winrar进行压缩的选项并且执行。<br>感觉比较麻烦的,请各位富翁指点了。
 
在windows上面选择一个文件,右键,会出现环境菜单,我希望实现的功能是,在获取一个文件的handle以后,能得到他的环境菜单,然后执行其中的某一个。比如,机器上安装了winrar以后,我就能获得的文件的环境菜单上关于用winrar进行压缩的选项并且执行。<br>感觉比较麻烦的,请各位富翁指点了。
 
文件关联到哪个应用程序好像是已经写到注册表里去了呀,直接读注册表吧.
 
顶,同意楼上。<br>procedure registerfiletype(ext,key,desc,icon,prg:string);<br>//ext: 文件名后缀 ,如可以为 '.tst' 或 'afile.tst'<br>//key: 在注册表中的键值 ,要唯一<br>//desc: 关联程序的描述<br>//icon: 缺省的程序图标 ,如 Application.ExeName+',1',可以缺省<br>//prg: 对应的应用程序<br>var myreg : treginifile;<br> &nbsp; &nbsp;ct : integer;<br>begin<br> &nbsp; &nbsp; // &nbsp;取文件的后缀<br> &nbsp; &nbsp; ct := pos('.',ext);<br> &nbsp; &nbsp; while ct &gt; 0 do begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delete(ext,ct,1);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ct := pos('.',ext);<br> &nbsp; &nbsp; end;<br> &nbsp; &nbsp; if (ext = '') or (prg = '') then exit; // 判断后缀及应用程序是否有效<br> &nbsp; &nbsp; ext := '.'+ext;<br> &nbsp; &nbsp; myreg := treginifile.create('');<br> &nbsp; &nbsp; try<br> &nbsp; &nbsp; &nbsp; &nbsp;myreg.rootkey := hkey_classes_root; // &nbsp;根应该为 HKEY_CLASSES_ROOT<br> &nbsp; &nbsp; &nbsp; &nbsp;if key = '' then key := copy(ext,2,maxint)+'_auto_file';<br> &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;如果没给出键值 ,则自动创建一个<br> &nbsp; &nbsp; &nbsp; &nbsp;myreg.writestring(ext,'',key); // &nbsp;写入描述的键值<br> &nbsp; &nbsp; &nbsp; &nbsp;myreg.writestring(key,'',desc); // &nbsp;写入描述<br> &nbsp; &nbsp; &nbsp; &nbsp;if icon &lt;&gt; '' then<br> &nbsp; &nbsp; &nbsp; &nbsp;myreg.writestring(key+'/DefaultIcon','',icon);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;写入缺省图标<br> &nbsp; &nbsp; &nbsp; &nbsp;myreg.writestring(key+'/shell/open/command','',prg+' &quot;%1&quot;');<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 写入相关联的应用程序<br> &nbsp; &nbsp; finally<br> &nbsp; &nbsp; myreg.free;<br> &nbsp; &nbsp; SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); //发送消息给系统<br> &nbsp; &nbsp; end;<br>end;
 
好像还是没有说清楚,就这么说好了<br>我希望做一个对文件操作的程序,实现的功能是1。知道选择的文件的上下文菜单有那些项。2。在程序里面能够选择执行我需要的某一项。<br>例如我的机器上安装了winrar,我就希望得到右键点击后的extract File...并执行
 
楼上已经告诉你了啊。直接读注册表就可以知道有些什么扩展了。<br><br>另外winrar有命令行模式的,可能更适合你。
 
你可以参考《windows外壳扩展编程入门实例》,我想应该能解决你的问题
 
后退
顶部