|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2003/12/13 11:55:14 |
标题: |
如何注册一个自己的clsid号,让windows中带指定后缀的文件显示自己指定的图标? |
浏览:2160 |
|
加入我的收藏 |
楼主: |
如何注册一个自己的clsid号,让windows中带指定后缀的文件(如.abc)显示自己指定的图标?
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求! |
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/12/13 12:07:52 |
1楼: |
偶当时做的是否没有考虑这个:
但 却可以实现 图标显示 与 文件关联! 编程实现文件关联 ---- 文件关联的目的是要实现某种扩展名的文件由相应的应用程序来打开,对于编写的应用软件来说,由于一般都有设计者特定的扩展名的数据文件,软件编制者应在程序中实现自动关联而不能由用户手工去实现。下面给出实现文件关联的实用程序。
---- 实现文件关联的核心是对注册表的操作, 所有的文件关联都在HKEY—CLASSES— ROOT 下面, 要实现文件关联必须在HKEY—CLASSES—ROOT 中增加两个键值,一是和文件扩展名对应的类型说明,二是对这种类型文件的操作所需要执行的应用程序。下面举例说明,本例实现将扩展名为.xyz的文件定义为“我自己的文件”类型,双击此种类型的文件时执行的打开功能使用记事簿程序。 实现这一功能需要用到Delphi中的函数 RegCreateKey、RegSetValue。实现如下:
---- 在窗体中放置一个按钮,双击按钮写如下代码:
procedure TForm1.Button1Click(Sender: TObject); var lphKey: HKEY; sKeyName: string; sKeyValue: string; begin sKeyName := ′myfile′; sKeyValue := ′我的文档′; RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey); RegSetValue(lphKey, ′′, REG—SZ, pchar(sKeyValue), 0); sKeyName := ′.xyz′; sKeyValue := ′myfile′; RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey); RegSetValue(lphKey, ′′, REG—SZ, pchar(sKeyValue), 0); sKeyName := ′myfile′; sKeyValue := ′c:\Windows\NotePad.exe %1′; RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey); RegSetValue(lphKey, ′shell\open\command′, REG—SZ, pchar(sKeyValue), MAX—PATH); end;
---- 建立一新文件,使其扩展名为.xyz,然后双击它看是否是启动记事簿来打开的。
----------------------------------------------
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/12/13 12:10:11 |
2楼: |
看看acdsee是 这么做的 不过 偶也不知道clsid的用处: Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\ACDSee.bmp] @="ACDSee BMP 图像"
[HKEY_CLASSES_ROOT\ACDSee.bmp\CLSID] @="{D3E34B21-9D75-101A-8C3D-00AA001A1652}"
[HKEY_CLASSES_ROOT\ACDSee.bmp\DefaultIcon] @="C:\\Program Files\\ACD Systems\\PlugIns\\IDE_ACDStd.apl,1"
[HKEY_CLASSES_ROOT\ACDSee.bmp\Insertable] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\protocol] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\protocol\StdFileEditing] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\protocol\StdFileEditing\server] @="mspaint.exe"
[HKEY_CLASSES_ROOT\ACDSee.bmp\protocol\StdFileEditing\verb] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\protocol\StdFileEditing\verb\0] @="编辑(&E)"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell] @="Open"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\ACDPrint] @="用 ACDSee 打印"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\ACDPrint\command] @="\"D:\\Program Files\\ACD Systems\\ACDSee\\5.0\\ACDSee5.exe\" /p \"%1\""
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Edit] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Edit\command] @="mspaint.exe %1"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Open] @="用 ACDSee 打开"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Open\command] @="\"D:\\Program Files\\ACD Systems\\ACDSee\\5.0\\ACDSee5.exe\" \"%1\""
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Open\ddeexec] @="[open(\"%1\")]"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Open\ddeexec\application] @="ACDSee"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Open\ddeexec\ifexec] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\Open\ddeexec\topic] @="System"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\print] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\print\command] @="mspaint.exe /p %1"
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\printto] @=""
[HKEY_CLASSES_ROOT\ACDSee.bmp\shell\printto\command] @="mspaint.exe /pt %1 %2 %3 %4"
----------------------------------------------
|
作者: |
|
2003/12/13 14:35:15 |
3楼: |
有空找找关于clsid的资料和高手,一起学习
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/12/13 17:41:53 |
4楼: |
clsid的用途有不同地方 对于IE工具栏扩展的CLSID可以固定不变的! 所以没有 固定的说法!
----------------------------------------------
|
作者: |
|
2003/12/13 20:42:24 |
5楼: |
系统中文件图标不是由clsid决定的吗,那应该能够注册新的编号啊,如何实现?
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
|
作者: |
|
2003/12/13 21:35:19 |
6楼: |
我觉得begin后的四句可以删除
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/12/13 21:46:27 |
7楼: |
偶是试过文件 不需要CLSID 偶也不知道到底有何意义!不信你可以试试!
----------------------------------------------
|
作者: |
|
2003/12/13 22:13:32 |
8楼: |
试过了,ok
考虑一下,要是我建一个文件夹,要求显示的图标是自己定义的,那是不是就该注册一个图标,让带某种后缀的文件关联上,
对了,文件夹不是采用后缀方式识别的吧,那系统如何区分文件夹和文件呢
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/12/14 10:04:36 |
9楼: |
文件 夹 就真的不好做了! 因为 偶确实不知道 CLSID要 怎么使用! 这个问题偶看 懂的人也不多!
因为象《瑞星杀毒》的文件夹 就是个性化的 不过不知道他的原理!
----------------------------------------------
|
作者: |
|
2003/12/14 13:35:58 |
10楼: |
可以在一个目录之下新建一个Desktop.ini文件,将其设为只读,系统,隐藏.
然后编辑如下内容:
[Shell.Classinfo] Info=这是我的文件夹 Icon_File=C:\WinNT\Notepad.exe Icon_Index=0
保存即可成功.如果你有更好的办法,请劳烦告知我一声.我的Email:
weipvb@tom.com
在此先谢
----------------------------------------------
-
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/12/14 14:56:44 |
11楼: |
不错大哥 向你学习 谢谢!
----------------------------------------------
|
作者: |
|
2003/12/19 21:26:37 |
12楼: |
谢了,好好学习
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
|
作者: |
|
2003/12/29 16:11:08 |
13楼: |
写com组件可以做到,可以学习外壳扩展编程
----------------------------------------------
尽情舒展,是一种向往,想去的地方、想拥有的感受,尽管追求!
|
|