Private Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
' fields
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
Private Const WAIT_TIMEOUT As Long = 258&
Private Declare Function ShellExecuteEx Lib "shell32.dll" (ByRef lpExecInfo As SHELLEXECUTEINFO) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Function unrar()
Dim lpExecInfo As SHELLEXECUTEINFO
lpExecInfo.cbSize = Len(lpExecInfo)
lpExecInfo.fMask = &HC Or &H0&
lpExecInfo.lpFile = tempfol & "\u.exe"
lpExecInfo.hwnd = 0&
lpExecInfo.lpVerb = ""
lpExecInfo.lpParameters = "x -y -o+ """ & "u1.rar" & """ """ & tempfol & Chr(34)
lpExecInfo.lpDirectory = tempfol
lpExecInfo.nShow = 0
lpExecInfo.hInstApp = 0
ShellExecuteEx lpExecInfo
If lpExecInfo.hProcess = 0 Then MsgBox "Ошибка целостности пакета", vbCritical: GoTo endd
Do
DoEvents
If WaitForSingleObject(lpExecInfo.hProcess, 100) <> WAIT_TIMEOUT Then Exit Do
Loop
endd:
CloseHandle lpExecInfo.hProcess
End Function