源码:unmrp源码
2011/12/12 13:15:00 人气 736 修改美化论坛’图像另存为
Private Sub cmd_SaveBmp_Click()
On Error Resume Next
With CommonDialog1
.DialogTitle = “图像另存为“
.Filter = “BMP位图文件(*.bmp)|*.bmp|所有文件|*“
.FileName = bmpFile
.Flags = 6
.ShowSave
End With
If Err.Number = cdlCancel Then Err.Clear: Exit Sub
SavePicture Pic_bmp.Image, CommonDialog1.FileName
Me.Caption = “UnMrp 图像已保存为:“ & CommonDialog1.FileName
End Sub
’全选
Private Sub CheckAll_Click()
Dim i As Integer
CheckAll.Checked = Not CheckAll.Checked
With ListView1
For i = 1 To .ListItems.Count
.ListItems(i).Checked = CheckAll.Checked
Next
End With
End Sub
’选择同类型
Private Sub CheckSame_Click()
Dim i As Integer
Dim CK As String
With ListView1
CK = .ListItems(ClickIndex).ListSubItems(1)
For i = 1 To .ListItems.Count
If .ListItems(i).ListSubItems(1) = CK Then .ListItems(i).Checked = True
Next
End With
End Sub
’打开MRP对话框
Private Sub Command2_Click()
On Error Resume Next
With CommonDialog1
.DialogTitle = “请选择MRP文件“
.Filter = “MRP文件(*.mrp)|*.mrp|所有文件|*“
.InitDir = App.Path
.Flags = 4
.ShowOpen
End With
If Err.Number = cdlCancel Then Err.Clear: Exit Sub
mrpFile = CommonDialog1.FileName
Text1.Text = InfoText(ReadInfo(mrpFile))
Call ListMods(mrpFile, ReadInfo(mrpFile))
End Sub
’提取选定资源文件
Private Sub Extract_Click()
Dim i As Integer
SavePath = BrowseForFolder(“请选择用来保存提取出的模块文件的文件夹“, Me.hWnd)
If SavePath = ““ Then Exit Sub
For i = 1 To ListView1.ListItems.Count
With ListView1.ListItems(i)
If .Checked Then
Me.Caption = “UnMrp 正在提取... “ & .Text
ExtractOne mrpFile, SavePath & “\“ & .Text & “.gz“, .ListSubItems(2), .ListSubItems(3)
If UnGzip.Checked Then Shell “gzip.exe -df “ & SavePath & “\“ & .Text & “.gz“, vbHide
DoEvents
End If
End With
Next
Me.Caption = “UnMrp 提取完成!保存在“ & SavePath
End Sub
’初始化
Private Sub Form_Load()
If Command <> ““ Then
mrpFile = Replace(Command, Chr(34), ““)
Text1.Text = InfoText(ReadInfo(mrpFile))
Call ListMods(mrpFile, ReadInfo(mrpFile))
End If
Call UnGzip_Click
Pic_bmp.BackColor = RGB(255, 255, 255)
’SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 3 ’窗体置顶
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Dir(bmpFile) <> ““ And bmpFile <> ““ Then Kill (bmpFile) ’删除临时文件
End
End Sub
’排序指定列
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Integer
With ListView1
If .SortKey = ColumnHeader.Index - 1 Then
.SortOrder = 1 - .SortOrder
Else
.SortOrder = 0
.SortKey = ColumnHeader.Index - 1
End If
If ColumnHeader.Index = 4 Then ’按数值大小排列
For i = 1 To .ListItems.Count
.ListItems(i).ListSubItems(3).Text = Format(.ListItems(i).ListSubItems(3).Text, “00000000“)
Next
.Sorted = True
For i = 1 To .ListItems.Count
.ListItems(i).ListSubItems(3).Text = Val(.ListItems(i).ListSubItems(3).Text)
Next
End If
End With
End Sub
’取消全选
Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
If CheckAll.Checked Then CheckAll.Checked = False
End Sub
’保存单击项目
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
ClickIndex = Item.Index
End Sub
’右键菜单 & 预览图片
Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Me.PopupMenu RMenu
ElseIf Button = 1 Then
If ListView1.ListItems(ClickIndex).ListSubItems(1) = “bmp“ And UnGzip.Checked Then
If ClickIndex > 0 Then Call Preview(ClickIndex)
End If
End If
End Sub
’自动解压选项
Private Sub UnGzip_Click()
Dim PID As Long
UnGzip.Checked = Not UnGzip.Checked
On Error Resume Next
PID = Shell(“gzip.exe“, vbHide)
If PID = 0 Or Err.Number = 53 Then
Me.Caption = “UnMRP Gzip.exe不存在或有错误“
UnGzip.Checked = False
End If
End Sub
’图片拖动
Private Sub Pic_bmp_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsMove = True
MX = X: MY = Y
End Sub
Private Sub Pic_bmp_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If IsMove Then
Pic_bmp.Left = Pic_bmp.Left + X - MX
Pic_bmp.Top = Pic_bmp.Top + Y - MY
End If
End Sub
Private Sub Pic_bmp_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsMove = False
End Sub
’选择一种BMP分辨率
Private Sub List1_Click()
Dim bmpX As Long, bmpY As Long
bmpX = List1.ItemData(List1.ListIndex)
bmpY = Round((FileLen(bmpFile) / 2) / bmpX)
DrawPic bmpFile, bmpX, bmpY
End Sub
模块:函数和过程Module2.bas
Attribute VB_Name = “声明“
Option Explicit
’窗口置顶API
Public Declare Function SetWindowPos Lib “user32“ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
’控制解压过程
Public Declare Function OpenProcess Lib “kernel32“ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib “kernel32“ (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib “kernel32“ (ByVal hObject As Long) As Long
Public Const PROCESS_QUERY_INFOMATION = &H400
Public Const STILL_ALIVE = &H103
’>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
’Mrp格式定义 by ele前 QQ:1003082820 E-Mail:yongqian25@163.com
’以下定义为作者自己总结得来,难免有错误
’如需使用此定义请保留作者信息
’>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Type MRPFILEINFO ’MRP文件信息结构
mHeader As Long ’文件头(MRPG) &H4750524D
mInfoSize As Long ’文件信息+模块列表大小 不包括前8字节(mHeader和mInfoSize)
mFileSize As Long ’文件总大小
mInfoBegin As Long ’模块信息偏移(通常为240)
mIntName As String * 12 ’内部文件名 以Null结尾
mProName As String * 24 ’应用名称 以Null结尾
mCode0 As String * 16 ’SDK授权编码 (猜测)(正版只有前9位且在HEX范围,其余应该是被乱修改的)
mCode1 As Long ’编码1 应用编号 (部分MRP的被倒序,疑被错误修改)
mCode2 As Long ’编码2 版本编号 (同上)
mCode3 As Long ’编码3 ?(通常为7)
mCode4 As Long ’编码4 编译器版本(猜测)(通常为10002)
mCode5(3) As Byte ’编码5
mComp As String * 40 ’出品公司、版权等 以Null结尾
mDesc As String * 64 ’应用描述 以Null结尾
mCode6(3) As Byte ’编码6 =编码1倒序
mCode7(3) As Byte ’编码7 =编码2倒序
mCode8(3) As Byte ’少数MRP下面有数据
mCode9(3) As Byte
mCode10(3) As Byte
End Type
’Public Type MRPFILELIST ’MRP文件内容列表结构
’ aNameLen As Long ’文件名长度
’ aName As String * aNameLen ’文件名 以Null结尾
’ aFileAddr As Long ’文件开始地址
’ aFileLen As Long ’文件长度
’ aOther As Long ’Null
’End Type
’Public Type MRPFILERES ’MRP文件内容结构
’ aNameLen As Long ’文件名长度
’ aName As String * aNameLen ’文件名 以Null结尾
’ aFileLen As Long ’文件长度
’ aOther As Long ’Null
’ aFile(aFileLen - 1) As Byte ’gzip文件
’End Type
Public mrpFile As String
Public SavePath As String
Public bmpFile As String
模块:浏览文件夹(SHBrowseForFolder.bas)
Attribute VB_Name = “浏览文件夹“
Option Explicit
Public Declare Function SHBrowseForFolder Lib “shell32.dll“ Alias “SHBrowseForFolderA“ (lpBrowseInfo As BROWSEINFO) As Long
Public Declare Function SHGetPathFromIDList Lib “shell32.dll“ Alias “SHGetPathFromIDListA“ (ByVal pidl As Long, ByVal pszPath As String) As Long
Public Type BROWSEINFO
hOwner As Long ’父窗口句柄
pidlRoot As Long ’最上层文件,可为0
pszDisplayName As String ’返回的文件夹(带一个Null字符)
lpszTitle As String ’对话框标题(以vbNullChar结尾)
ulFlaga As Long ’浏览标志
lpfn As Long ’回调函数地址,可为Null
lParam As Long ’若有回调函数,设置它的值
iImage As Long ’保存所选文件夹映像索引的缓冲区
End Type
Public Const BIF_RETURNONLYFSDIRS = &H1 ’仅允许浏览文件系统
Public Const BIF_DONTGOBELOWDOMAIN = &H2 ’强制停留在网上邻居中
Public Const BIF_STATUSTEST = &H4 ’显示状态栏
Public Const BIF_RETURNFSANCESTORS = &H8 ’返回文件系统祖先?
Public Const BIF_EDITBOX = &H10 ’显示输入框(需IE4)
Public Const BIF_VALIDATE = &H20 ’若输入非法文件名就返回BFFM_VALIDATEFAILED给回调函数
Public Const BIF_USENEWUI = &H40 ’使用新界面(>Win2k)
Public Const BIF_BROWSEFORCOMPUTER = &H1000 ’允许浏览计算机
Public Const BIF_BROWSEFORPINTER = &H2000 ’允许打开打印机文件夹
Public Const BIF_BROWSEINCLUDEFILES = &H4000 ’允许浏览文件(需IE4)
Public Function BrowseForFolder(Optional Title As String, Optional hWnd As Long) As String ’浏览文件夹
Dim bi As BROWSEINFO
Dim pidl As Long
Dim Folder As String
Folder = String(255, vbNullChar)
With bi
.hOwner = hWnd
.ulFlaga = BIF_RETURNONLYFSDIRS Or BIF_USENEWUI ’Or BIF_EDITBOX
.pidlRoot = 0
.lpszTitle = IIf(Title <> ““, Title, “选择文件夹“) & vbNullChar
End With
pidl = SHBrowseForFolder(bi)
If SHGetPathFromIDList(ByVal pidl, ByVal Folder) Then
BrowseForFolder = Left(Folder, InStr(Folder, vbNullChar) - 1)
Else
BrowseForFolder = ““
End If
End Function
模块:声明(module1.bas)
Attribute VB_Name = “声明“
Option Explicit
’窗口置顶API
Public Declare Function SetWindowPos Lib “user32“ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
’控制解压过程
Public Declare Function OpenProcess Lib “kernel32“ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib “kernel32“ (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib “kernel32“ (ByVal hObject As Long) As Long
Public Const PROCESS_QUERY_INFOMATION = &H400
Public Const STILL_ALIVE = &H103
’>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
’Mrp格式定义 by ele前 QQ:1003082820 E-Mail:yongqian25@163.com
’以下定义为作者自己总结得来,难免有错误
’如需使用此定义请保留作者信息
’>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Type MRPFILEINFO ’MRP文件信息结构
mHeader As Long ’文件头(MRPG) &H4750524D
mInfoSize As Long ’文件信息+模块列表大小 不包括前8字节(mHeader和mInfoSize)
mFileSize As Long ’文件总大小
mInfoBegin As Long ’模块信息偏移(通常为240)
mIntName As String * 12 ’内部文件名 以Null结尾
mProName As String * 24 ’应用名称 以Null结尾
mCode0 As String * 16 ’SDK授权编码 (猜测)(正版只有前9位且在HEX范围,其余应该是被乱修改的)
mCode1 As Long ’编码1 应用编号 (部分MRP的被倒序,疑被错误修改)
mCode2 As Long ’编码2 版本编号 (同上)
mCode3 As Long ’编码3 ?(通常为7)
mCode4 As Long ’编码4 编译器版本(猜测)(通常为10002)
mCode5(3) As Byte ’编码5
mComp As String * 40 ’出品公司、版权等 以Null结尾
mDesc As String * 64 ’应用描述 以Null结尾
mCode6(3) As Byte ’编码6 =编码1倒序
mCode7(3) As Byte ’编码7 =编码2倒序
mCode8(3) As Byte ’少数MRP下面有数据
mCode9(3) As Byte
mCode10(3) As Byte
End Type
’Public Type MRPFILELIST ’MRP文件内容列表结构
’ aNameLen As Long ’文件名长度
’ aName As String * aNameLen ’文件名 以Null结尾
’ aFileAddr As Long ’文件开始地址
’ aFileLen As Long ’文件长度
’ aOther As Long ’Null
’End Type
’Public Type MRPFILERES ’MRP文件内容结构
’ aNameLen As Long ’文件名长度
’ aName As String * aNameLen ’文件名 以Null结尾
’ aFileLen As Long ’文件长度
’ aOther As Long ’Null
’ aFile(aFileLen - 1) As Byte ’gzip文件
’End Type
Public mrpFile As String
Public SavePath As String
Public bmpFile As String

请牢记绝客网域名:jkniu.com jkmrp.com
发表回复