如何实现右键打开程序功能

qjgpizi 2003-11-26 11:53:11
就像ultraedit和winrar一样,对选中的文件点击右键,选择程序打开,而程序打开后就可以把选中的文件放入列表进行下一步操作?

我知道是要修改注册表,可是怎么修改呢?
我希望达到得效果是:在选中的文件上点击右键后,出现我得程序得名字,选择我的程序打开后,就可以以我选择得文件为目标对这些文件做操作。
就像winrar一样,把选择得多个文件都加入到它的列表里进行操作。
我不懂得地方是:1。注册表得修改;2。如何以选择得文件为目标打开并加入到我得程序处理列表中

已有的回答
1在hkey_class_root\* 下建立shell子项,在其中再建立 \命令名 \命令名\command 子项,command的默认值就是要执行的命令,一般为 yourexe.exe %1,
然后就可以处理命令行参数了,
2 一般是用互斥对象, 第一次启动实例时,检测不到互斥对象,此时建立互斥对象,将文件加入列表 就行了,
再次 选择文件运行时就会检测到互斥对象,就说明已经有实例在运行了,
这时,用findwindow得到主实例的句柄,将要打开文件的信息发给该实例,
然后就退出程序,运行着的实例处理该消息,将文件加入列表就行了

第一步的问题已经解决,第二步如何具体实现?怎样判断是选中的是一个文件还是多个文件?语言和工具不限,使用windows api就可以了。

说的不明白的话请问!
我是初学者,希望大家能明白的讲清楚,谢谢了
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
RomanticProgrammer 2003-12-08
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1979/1979562.xml?temp=.3514368
猛禽 2003-12-02
  • 打赏
  • 举报
回复
楼上的答的不对,人家要的是Context Menu不是Associate
HUANG_JH 2003-12-02
  • 打赏
  • 举报
回复
写注册表,提供个函数给你吧
bool RegisterExt(const char* ext, const char* desc, const char* exe)
{
if (!ext || !ext[0] || !desc || !desc[0] || !exe || !exe[0]) return false;
char buf [255] ;
memset(buf,0,255);
strncpy(buf, exe, 3); buf[3] = '\0';
TRegistry * Reg=new TRegistry();
Reg->RootKey=HKEY_CLASSES_ROOT;
Reg->OpenKey(ext,true);
Reg->WriteString("",desc);
Reg->CloseKey();
AnsiString Desc = desc;
if(!Reg->OpenKey(Desc+"\\DefaultIcon",true)){
Reg->CloseKey(); delete Reg; return false;
}
sprintf(buf,"%s,0",exe);
Reg->WriteString("",buf);
Reg->CloseKey();
if(!Reg->OpenKey(Desc+"\\Shell\\Open\\Command",true)){
Reg->CloseKey(); delete Reg; return false;
}
sprintf(buf,"%s %%1",exe);
Reg->WriteString("",buf);
Reg->CloseKey();
delete Reg; return true;
}


调用示例:
RegisterExt(".dat","DAT files","D:\\program files\\ultraedit\\Uedit32.exe");

将.dat 类型得文件跟ultraedit关联起来
第一个参数是类型名称,第二个参数是类型描述,第三个是执行文件名称
myy 2003-11-27
  • 打赏
  • 举报
回复
2。如何以选择得文件为目标打开并加入到我得程序处理列表中

这其实就是IPC,进程间通信
用WM_COPYDATA、共享内存都可以实现

看看BCB的 Example\Controls\SingleInst 就明白了
qjgpizi 2003-11-27
  • 打赏
  • 举报
回复
回楼上,我看过了,可是没有明白怎么回事,所以想在问问!
希望高人出现解答了,最近给工作做一些小软件,完成一些重复性的工作,所以遇到了很多问题。
猛禽 2003-11-27
  • 打赏
  • 举报
回复
---qjgpizi【见习成员】 J

是你?

MOP上不是有人答了吗?

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧