关于文件类型注册(高级内容)...

town 2000-07-24 04:13:00
用VB(主要是要原理及API函数),如何注册某种扩展名的文件,使其图标,打开方式,右键菜单与某个DLL或EXE关联起来。
右键菜单与DLL关联时,可以直接调用DLL中的函数(有参数)吗?

我不是很懂,希望你们能懂我说的意思(类似于*.ZIP)!
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
JGTM2000 2000-07-28
  • 打赏
  • 举报
回复
rundll32命令的格式是这样的:

rundll32 <dllname>,<entryName> <parameter line>

给你写一下rundll32怎么工作的吧(示意代码):

1,hModule = LoadLibrary("dllname")
2, procEntry = GetProcAddress(hModule,"<entryName>");
3, if(!procEntry) return;
4,RUNDLL32PROC(procEntry)(hwnd,hInstance,paramLine,cmdShow);
5,return

关键这个RUNDLL32PROC的函数类型,定义如下:

void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow); // for 32bit dll

你按照这个原型声明函数并输出符号就可以被rundll32执行了。其中lpszCmdLine就是入口函数名称空格后面的字串。要注意CALLBACK声明表明函数的调用规则是stdcall。void说明不用返回值。hwnd,hinst何nCmdShow跟WinMain入口参数的含义相同。

OK,have a try! Happy programming!
town 2000-07-28
  • 打赏
  • 举报
回复
我看错了,不是直接运行DLL(我是觉奇怪,安装目录找不到EXE,只有DLL),查看注册表,发现是用WIN自带的RUNDLL32.EXE在加载该DLL,关联为[rundll32.exe C:\WINNT\System32\Shellext\split.dll,UnSplitRunDLL "%1"],分析DLL知UnSplitRunDLL是Split.DLL中的接口函数,"%1"是该函数的参数。不知VB的DLL怎样才能做成这个样子呢.
JGTM2000:请你给俺解释一下!

JGTM2000 2000-07-27
  • 打赏
  • 举报
回复
"打开这种类型的文件只有通过DLL"?什么意思?DLL也是要用可执行模块加载执行啊!另外,{5e941d80-bf96-11cd-b579-08002b30bfeb}这样的东西是CLSID,COM组件的标识,你把具体的关联抄来,俺们给你解释。
town 2000-07-26
  • 打赏
  • 举报
回复
OK 1/2了。
但执行如何与DLL关联呢,我只有一个DLL,没有EXE,打开这种类型的文件只有通过DLL。不知是否可行。
我看其它程序有的关联是一串{5e941d80-bf96-11cd-b579-08002b30bfeb}之类的东西,不知是什么意思。
hyzx2000 2000-07-24
  • 打赏
  • 举报
回复
下面的代码实现了注册文件扩展名、图标、打开方式,

'声明以下常数和API函数
Private Const REG_SZ = 1 ' Unicode nul terminated string
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
'cbData为字符串lpData的长度,一个汉字为两个字节
'使用示例,注册一种扩展名123的文件,缺省打开方式为用记事本
Private Sub Command1_Click()
'注册文件类型.123为file123
RegSetValue HKEY_CLASSES_ROOT, ".123", REG_SZ, "file123", 7
'设置文件类型file123的图标与记事本的图标相同
RegSetValue HKEY_CLASSES_ROOT, "file123\DefaultIcon", REG_SZ, "c:\windows\notepad.exe,0", 24
'设置file123的缺省打开方式为read
RegSetValue HKEY_CLASSES_ROOT, "file123\Shell", REG_SZ, "read", 4
'设置file123的右键菜单read显示的菜单项名称为"阅读.123文件"
RegSetValue HKEY_CLASSES_ROOT, "file123\Shell\read", REG_SZ, "阅读.123文件", 12
'设置文件类型file123的缺省打开方式为用记事本打开
RegSetValue HKEY_CLASSES_ROOT, "file123\Shell\read\Command", REG_SZ, "c:\windows\notepad.exe ""%1""", 22
End Sub


7,759

社区成员

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

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