如何为文件注册对应图标呢?

boffinyu 2003-09-16 08:39:09
我的程序生成的文件类型是*.sxl ,现在想为该类型文件注册我的图标sxl.ico,请问如何实现呢?
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aijie099 2003-11-03
  • 打赏
  • 举报
回复
自定义关联文件的的图标,如何设置在程序文件中的位置 ?
我自己做了个,图标。也用到了,程序中。程序图标还可以,搞定。合适。可关联文件却
只是那个图标的,中的16*16的小图标。我想自定义关联文件的图标,修改注册表。可不知
道,如何知道,我要的那个图标,是第几个。也就是说:比如:*。dll,-34 是个图标。用
在我自己的程序中,那个。数字是多少呢?
liul17 2003-09-16
  • 打赏
  • 举报
回复
我知道当点击一个html文件时,浏览器就会自动打开,或者是点击一个doc文件,Word就会运行。有没有想过当用户点击你自己定义文件类型时,你的程序就会自动启动呢?其实想做到这点很简单,只须对注册表做点手脚就行了。

每一个文件类型的信息被保存在注册表中的 'HKEY_CLASSES_ROOT'下面。假设我们自定义的文件类型的后缀为.hyp,文件名为Test_File_Hype (中间不能有空格).

首先在HKEY_CLASSES_ROOT下创建 .hyp

HKEY_CLASSES_ROOT\.hyp

将[默认]键值改为"Test_File_Hype"。然后在HKEY_CLASSES_ROOT下添加主键 Test_File_Hype

HKEY_CLASSES_ROOT\Test_File_Hype

按照下面的路径添加新的主键

HKEY_CLASSES_ROOT\Test_File_Hype\Shell

HKEY_CLASSES_ROOT\Test_File_Hype\Shell\Open

HKEY_CLASSES_ROOT\Test_File_Hype\Shell\Open\Command

将下面的字符作为Command的键值

your application path.exe %1

(例如 C:\WINDOWS\HYP\HYP.EXE %1)

或许你还想为自己的文件类型加上同自己的执行文件一样的图标,很简单,照下面的方法添加就行了。

HKEY_CLASSES_ROOT\Test_File_Hype\DefaultIcon

输入键值:

your application path.EXE,0

后面的零表示文件的图标同程序的主图标一致,如果你的程序有很多图标,换一换数字就可改变文件显示的图标了。


‘==========================================================================
‘===========================================================================
‘===========================================================================
‘===========================================================================
‘===========================================================================
VB中进行注册
shell "regsvr32 """ & path & "\yourocxname.ocx"""
加/s不弹出对话框



Private Declare Function LoadLibraryRegister Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function CreateThreadForRegister Lib "kernel32" Alias "CreateThread" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetProcAddressRegister Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function FreeLibraryRegister Lib "kernel32" Alias "FreeLibrary" (ByVal hLibModule As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, lpExitCode As Long) As Long
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)

'注册、反注册OCX、DLL文件
Public Function fun_RegServer(ByVal FileName As String) As Boolean
'注册
fun_RegServer = RegSvr32(FileName, False)
End Function

Public Function fun_UnRegServer(ByVal FileName As String) As Boolean
'反注册
fun_UnRegServer = RegSvr32(FileName, True)
End Function

Private Function RegSvr32(ByVal FileName As String, bUnReg As Boolean) As Boolean
Dim lLib As Long
Dim lProcAddress As Long
Dim lThreadID As Long
Dim lSuccess As Long
Dim lExitCode As Long
Dim lThread As Long
Dim bAns As Boolean
Dim sPurpose As String
sPurpose = IIf(bUnReg, "DllUnregisterServer", "DllRegisterServer")
If Dir(FileName) = "" Then Exit Function
lLib = LoadLibraryRegister(FileName)
'载入文件
If lLib = 0 Then Exit Function
lProcAddress = GetProcAddressRegister(lLib, sPurpose)
If lProcAddress = 0 Then
'不是ActiveX控件
FreeLibraryRegister lLib
Exit Function
Else
lThread = CreateThreadForRegister(ByVal 0&, 0&, ByVal lProcAddress, ByVal 0&, 0&, lThread)
If lThread Then
lSuccess = (WaitForSingleObject(lThread, 10000) = 0)
If Not lSuccess Then
Call GetExitCodeThread(lThread, lExitCode)
Call ExitThread(lExitCode)
bAns = False
FreeLibraryRegister lLib
Exit Function
Else
bAns = True
End If
CloseHandle lThread
FreeLibraryRegister lLib
Else
FreeLibraryRegister lLib
End If
End If
RegSvr32 = bAns
End Function
TechnoFantasy 2003-09-16
  • 打赏
  • 举报
回复
而.ocx文件的图标在
HKEY_CLASSES_ROOT\ocxfile\DefaultIcon
里面

那么txtfile、ocxfile是怎么得到的呢,你可以在HKEY_CLASSES_ROOT下找到.txt和.ocx项,然后根据他们的默认值得到上面的名字。
TechnoFantasy 2003-09-16
  • 打赏
  • 举报
回复
看错了,特定类型文件对应的图标在注册表里面,例如.txt文件的图标就在
HKEY_CLASSES_ROOT\txtfile\DefaultIcon
里面
TechnoFantasy 2003-09-16
  • 打赏
  • 举报
回复
SHGetFileInfo可以按文件类型取图标,如:
SHFILEINFO sfi;
HIMAGELIST hil;

ZeroMemory(&sfi,sizeof(sfi));
hil = SHGetFileInfo(".zip",
FILE_ATTRIBUTE_NORMAL,
&sfi,
sizeof(sfi),
SHGFI_USEFILEATTRIBUTES|SHGFI_ICON);

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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