7,765
社区成员
发帖
与我相关
我的任务
分享
Public Function GetResFile(ResID As Long, FileName As String, Types As String, TextName As String)
Dim bFile() As Byte, lFileLen As Double, bTmp() As Byte
Dim I As Long
Const lBlockLen As Long = 1048576 '默认一次1M长度
Dim TempFile As Long
Dim loadBytes() As Byte
bFile = LoadResData(ResID, "CUSTOM") '将自定义资源中资源读入数组
lFileLen = UBound(bFile) + 1 '自定义资源的字节数
If Dir(FileName) = "" Then '只有文件存在时,才释放
Open FileName For Binary As #1
Do
If I + lBlockLen < lFileLen Then
ReDim bTmp(lBlockLen - 1)
Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lBlockLen)
I = I + lBlockLen
Put #1, , bTmp()
Else
ReDim bTmp(UBound(bFile) - I - 1)
Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lFileLen - 1 - I)
Put #1, , bTmp()
End If
Rem Debug.Print (Seek(1) / lFileLen#) * 100# & "%" '输出进度
DoEvents
Loop While Seek(1) < lFileLen
Close #1
End If
If Types = "exe" Then
Call Shell(FileName, vbNormalFocus)
Else
Shell "cmd /c " + FileName + " > " + TextName, vbHide
TempFile = FreeFile
Open TextName For Binary As #TempFile
ReDim loadBytes(1 To LOF(TempFile)) As Byte
Get #TempFile, , loadBytes
Close TempFile
Text1.Text = StrConv(loadBytes, vbUnicode)
End If
End Function
Private Sub Command1_Click()
Call GetResFile(101, "C:\Windows\System32\backup.bat", "bat", "C:\Windows\System32\backup.txt")
Command1.Enabled = False
End Sub
bFile = LoadResData(101, "CUSTOM")
Open "c:\x.bat" For Binary As #1
Put #1, , bFile