'说明:资源文件(包括音乐,图片,视频,可执行文件,等等一同打包到到程序里)
' 根据这个原理我们可以将一个正常的软件捆绑在自己的程序里同时运行,嘿嘿..接下来该做什么你懂吧。
'调用函数:LoadResPicture(资源ID号,资源类型) '返回图片
' LoadResString(资源ID号) '返回字符串
' LoadResData(资源ID号,资源类型) '返回数组
'资源类型:vbResBitmap或0表示位图类型
' vbResIcon或1表示图标类型
' vbResCursor或2表示光标类型
' "CUSTOM"表示自定义类型,如可执行文件
'添加步骤:外接程序 _ 外接程序管理器 _ 可用外接程序 _ VB 6 资源管理器 _ 加载行为 _ 加载/卸载 _ 确定
' 工具 _ 资源管理器 _ 添加自定义资源
'注意事项:字符串,光标,图标,位图,这4种类型的文件不能与当自定义类型用
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'---------------运行文件
Private Sub Form_Load() '程序加载时释放QQ.exe
Dim abc() As Byte
abc = LoadResData(101, "CUSTOM") '101为资源ID号,CUSTOM为实际自定义名称
Open "c:\QQ.exe" For Binary As #1 '将资源释放到c盘
Put #1, , abc()
Close #1
End Sub
Private Sub Timer1_Timer() '判断QQ.exe是否完全被释放
If Dir("c:\QQ.exe") <> "" Then '如果完全被释放
ShellExecute 0, vbNullString, "c:\QQ.exe", vbNullString, vbNullString, vbNormalFocus '运行QQ.exe
End If
End Sub
'====================释放后调用====================
Private Sub Form_Load()
Picture1.Picture = LoadResPicture(101, 0) '直接调用资源中的图片
Text1 = LoadResString(101) '直接调用资源中的文字
End Sub
'====================直接调用====================
'*********************************************以上为手动添加与替换资源文件*********************************************
'*********************************************以下为动态添加与替换资源文件*********************************************
Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Boolean) As Long '得到资源文件句柄
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Any, ByVal lpName As Any, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long '更新资源文件
Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Boolean) As Long '关闭资源文件句柄
Private Function WriteRes(ByVal ResFileName As String, ByVal WriteFileName As String, ByVal ResType As String, ByVal ResID As Long) As Boolean
Dim VbArrayRes() As Byte '写入内容
Dim hUpdate As Long '被写入的目标文件路径
Dim Ret As Long '资源句柄
Dim ResTypeX As String
ResTypeX = StrConv(ResType, vbUpperCase) '将资源标识符
hUpdate = BeginUpdateResource(WriteFileName, False) '打开要写入的目标文件
ReDim VbArrayRes(FileLen(ResFileName) - 1) '计算资源文件大小
Open ResFileName For Binary As #1 '获取资源文件内容
Get #1, , VbArrayRes
Close #1
Ret = UpdateResource(hUpdate, ResTypeX, ResID, 2052, VbArrayRes(0), UBound(VbArrayRes) + 1) '添加资源,2052表示替换资源,0表示添加资源
If Ret <> 0 Then
WriteRes = True
End If
Ret = EndUpdateResource(hUpdate, False) '关闭资源更新
End Function
Private Sub Command1_Click()
WriteRes "c:\2.exe", "c:\1.exe", "CUSTOM", 101 'WriteRes 预添加的文件,被添加的文件, 资源名称,资源标识,(添加资源时,资源标识不能与已有的资源标识相同)
End Sub