VB可用的,有些什么可以解压带密码zip文件的控件?

gfugfu 2008-04-14 11:58:07
原来一直用的 Info-ZIP UnZip.DLL ,网上很多都是这个的代码,很好用,也可以解压带密码的zip,但是在vista下解压带密码的zip就会出错。

后来找到了 zlib.dll,也很好用,但是不能解带密码的zip

有没有其他什么可选择的?谢谢

...全文
590 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq313185710 2011-01-12
  • 打赏
  • 举报
回复
ddddd
eslbs 2008-04-16
  • 打赏
  • 举报
回复
9楼代码不错 mark一下
嗷嗷叫的老马 2008-04-16
  • 打赏
  • 举报
回复
路过.
gfugfu 2008-04-16
  • 打赏
  • 举报
回复
谢谢大家,特别是cbm666的帮助,经过再三检查,发现 Info-ZIP 的 unzip.dll 并没有问题,而是调用时候vb中关于密码的变量类型定义问题,修改一下就好了,这里帖一下,以便其他朋友绕弯:


网上找到的unzip.dll在vb中调用代码有个函数是这样的:
Public Function UZDLLPass(ByRef p As UNZIPCBCh, _
ByVal n As Long, ByRef m As UNZIPCBCh, _
ByRef Name As UNZIPCBCh) As Integer
这时候在9x、2k、xp下都没问题,但是在vista下解压带密码的zip文件时,无论输入什么,都反馈err82(密码错误)


改为:
Public Function UZDLLPass(ByRef p As UNZIPCBCh, _
ByVal n As Long, ByRef m As UNZIPCBCh, _
ByRef Name As UNZIPCBCh) As Long
错误即可修复


分析,这个函数返回后传入unzip.dll中的是密码地址,vista下估计都是32位寻址,而vb中int变量是16位的(不像vc中和long一样,也是32位的),所以出错。


至此,vb中使用info-zip的zip.dll和unzip.dll可以完美的处理zip文件压缩、解压缩方面的工作了,并且完美支持zip密码。


结帖散分
可西哥 2008-04-16
  • 打赏
  • 举报
回复
调EXE还不如调用DLL,
用RAR不如用ZIP.DLL,
或者找最新的7Z算法好了.

cbm6666 2008-04-15
  • 打赏
  • 举报
回复
'代码其实可以少很多, 主要是 "严谨" 一些, 因为 Rar.exe解压成功会自动退出,解压失败则会残留在进程,所以不得不多加些检测代码.
'你必需安装 Winrar 并将它的 Rar.exe 拷到 Windows系统下或 System32下面
'如果你不喜欢这种方式,我还有另个代码,它需要一个dll,呵呵,我可不喜欢,要的话给我邮箱.

'添加 Command1

Option Explicit
Dim jj&, aa$, SourceFile$, TargetPath$, Passw$, starttm&, rtn&, objWMIService, colProcesslist, objProcess

Private Sub Command1_Click()
SourceFile = "c:\mon.rar": TargetPath = "c:\test": Passw = "123"
If Dir(SourceFile) = "" Then MsgBox "解压文件不存在": Exit Sub
Call CloseExe("rar.exe") '检查是否有Rar.exe在运行,有的话就关掉
aa = "rar x -y -p" & Passw & " -o+ " & SourceFile & " " & TargetPath
Call Shell(aa, vbHide)
starttm = Timer
Do
DoEvents
If Isrunexe("rar.exe") = False Then Exit Do
Loop Until Timer > starttm + 5
If Timer > starttm + 10 Then
MsgBox "密码错误或其它原因解压失败"
Call CloseExe("rar.exe") '关掉Rar.exe
Else
MsgBox "解压成功"
End If
End Sub

Public Function Isrunexe(Exenm As String) As Boolean
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcesslist = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & Exenm & "'")
Isrunexe = IIf(colProcesslist.Count > 0, True, False)
Set objWMIService = Nothing
Set colProcesslist = Nothing
End Function

Public Sub CloseExe(Exenm As String)
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcesslist = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & Exenm & "'")
If colProcesslist.Count > 0 Then
For Each objProcess In colProcesslist
If InStr(UCase(objProcess.ExecutablePath), UCase(Exenm)) > 0 Then objProcess.Terminate
Next
End If
Set objWMIService = Nothing
Set colProcesslist = Nothing
End Sub

gfugfu 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cbm666 的回复:]
呵呵, 这个帖我都发过了, 哎CSDN的搜索很像不太管用.

这个简单, 下午重写一个给你, 吃饭喝酒先.............
[/Quote]

先感谢一下~~~
gfugfu 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenjl1031 的回复:]
WinRAR支持:RAR、ZIP、CAB、ARJ、LZH、ACE、7—ZIP...
[/Quote]

winrar是都支持,但是他那个dll只是rar的,入口:
unrar.RAROpenArchive
unrar.RAROpenArchiveEx
unrar.RARCloseArchive
unrar.RARReadHeader
unrar.RARReadHeaderEx
unrar.RARProcessFile
unrar.RARProcessFileW
unrar.RARSetChangeVolProc
unrar.RARSetProcessDataProc
unrar.RARSetCallback
unrar.RARSetPassword
cbm6666 2008-04-15
  • 打赏
  • 举报
回复
呵呵, 这个帖我都发过了, 哎CSDN的搜索很像不太管用.

这个简单, 下午重写一个给你, 吃饭喝酒先.............


andyinfrasys 2008-04-15
  • 打赏
  • 举报
回复
可以用WinRar的unrar.dll,免费的
东方之珠 2008-04-15
  • 打赏
  • 举报
回复
所以,昨天我给你说的哪个是正确的。
东方之珠 2008-04-15
  • 打赏
  • 举报
回复
WinRAR支持:RAR、ZIP、CAB、ARJ、LZH、ACE、7—ZIP...
nicon 2008-04-15
  • 打赏
  • 举报
回复
楼主看一下这个网站里的控件是否可行
http://3d2f.com/programs/11-059-rsp-zip-compressor-ocx-download.shtml
CathySun118 2008-04-15
  • 打赏
  • 举报
回复
好像都是要收费的,关注
cbm6666 2008-04-15
  • 打赏
  • 举报
回复
'下面是以前的笔记, 你参考下吧,那时我用的是 8.0 现在很像是11.1了,我觉得还是 rar好用,两者都一样都有版权问题.
'密码参数是 -s 与rar有些不同.

语法:winzip32.exe [-min] action [options] filename[.zip] files

参数说明:

-min 最小化
指定 Winzip 执行时为最小化。如果您要使用 -min 这个参数,它必须是命令列参数的第一个参数。

action 方法

-a add 加入文件
-f freshen 重新整理目前文件
-u update 更新文件
-m move 移动文件

options 选项

Directories 文件夹选项
-r Recurse Directories 含文件夹內內容。
-p Save Extra Directory Info 储存其他的文件夹信息。
method 決定压缩的方法选项
-ex eXtra 最大 (最慢)
-en Normal 一般 (默认值)
-ef Fast 快速
-es Super fast 最快速
-e0 no compression 不压缩
其他选项
-s 设定密码 密码必须使用双引号括起来。
例如:-s "Secret Password",不过要注意大小写是不同的!
-hs   包含符合条件的隐藏及系统文件。

filename.zip 压缩文件名
指定压缩后的文件名,要注意的是必须是全路径文件名 (含磁碟機代号及文件夹)。

files 所有原始文件
一个或多个文件,每一个文件写在獨立的一行,可以使用萬用字元,例如:*.bak。

解压缩文件:

语法:winzip32.exe -e [options] filename[.zip] directory

参数说明:

-e 表示解压缩
是必要的参数!

options 选项

-o Overwrite existing files
without prompting 取代同名的文件。
-j Junk pathnames 跳過舊文件。
除非指定 -J 这个参数,否則会使用原本的文件夹名稱。
-s 设定密码 密码必须使用双引号括起来。
例如:-s "Secret Password",不过要注意大小写是不同的!
-hs   包含符合条件的隐藏及系统文件。

filename.zip 压缩文件名
指定压缩后的文件名,要注意的是必须是全路径文件名 (含磁碟機代号及文件夹)。

directory 文件夹
解压缩后的文件存放的文件夹。如果文件夹不存在便会自动建立。

注意事项:

※非常重要:永远使用全路径文件名 。
※若希望执行 Winzip 时是最小化,要使用 -min 这个参数,它必须是命令列参数的第一个参数。
※Winzip 內建只支援 zip 及 unzip 二种操作模式。
※若是長文件名的话,必须使用双引号括起来。
※在设定文件时,前面及最后的字元不可空白,也不可有空白行!
※在命令列中的方法及选项参数,至少要用一个以上的空白分隔。

※WinZip 可以用来配合 cc:Mail 压缩文件:
更改 WMAIL.INI 中的 [cc:Mail] section 的 compress= 这一行
指定 Winzip 的完整路径,并跟随着 "-a %1 @%2" 参数
例如:如果 Winzip 安装在 c:\winzip,則 compress= 这一行必须改成
compress=c:\winzip\winzip.exe -a %1 @%2
silencenet 2008-04-15
  • 打赏
  • 举报
回复
.顶下..
cbm6666 2008-04-15
  • 打赏
  • 举报
回复
我以前试过 Winzip 用法与winrar几乎是一样的,一样可用的, 我现没装winzip无法试.
gfugfu 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 cbm666 的回复:]
如果你是怕版权问题的话, 这表示你是用在 "商业用途", 这样的话我有几点要说明:

1.全世界使用未授权的Winrar有多少你知道吗?Winrar要找麻烦的话不会找到你这个体户,没油水赚.

2.既然是"商业用途" 怕的话, 你为何不花点小钱买一个正版的? 本人所有发布于商业上的软件 100%买正版的,包扩Win2000 VB6.0中文版与英文版与繁体版.

3.我手头上有好几个网上搜来的压缩与解压缩代码, 都是使用 Unrar.dll 来解压缩的, 也许有其…
[/Quote]

呵呵,认同认同,只是那个rar.exe在rar网站上并没说对外可以调用,unrar.dll倒是允许使用,但看范例中无法解压zip文件。

cbm6666 2008-04-15
  • 打赏
  • 举报
回复
如果你是怕版权问题的话, 这表示你是用在 "商业用途", 这样的话我有几点要说明:

1.全世界使用未授权的Winrar有多少你知道吗?Winrar要找麻烦的话不会找到你这个体户,没油水赚.

2.既然是"商业用途" 怕的话, 你为何不花点小钱买一个正版的? 本人所有发布于商业上的软件 100%买正版的,包扩Win2000 VB6.0中文版与英文版与繁体版.

3.我手头上有好几个网上搜来的压缩与解压缩代码, 都是使用 Unrar.dll 来解压缩的, 也许有其它方法只是我手头上没有,呵呵大把的国内著名网站都不怕你怕啥 ? 但是本人极力BS使用没版权而用在商业用途上的软件.

4.如果上面所说的你都无法认同的话, 我就只有最后两句话, 其一另请高明, 其二, 压缩与解压缩的代码完全自己写,别人压缩的我可没辙.
gfugfu 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cbm666 的回复:]
你把 rar.exe 捆在你的资源文件里面, 在线自动释放到客户端的 system32下面不就好了吗? 客户又不会知道你在运行rar.exe
[/Quote]

rar.exe不是开放的吧?有版权问题的
加载更多回复(3)

1,486

社区成员

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

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