7,785
社区成员




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