ファイルのコピーとLZHファイルをUnlha32.dllで解凍する方法

◆概要
 この資料は、Microsoft AccessでファイルのコピーとLZHファイルをUnlha32.dllで解凍する方法について記載しています。


 ファイルのコピーとLZHファイルをUnlha32.dllで解凍するには、Windows APIを使う必要があります。  次の例は、C:\にあるken_all.lzhというLZHファイルをデータベースのカレントドライブにコピーして解凍します。

Option Compare Database
Option Explicit

' LHA
Declare Function Unlha Lib "UNLHA32.DLL" _
    (ByVal hWnd As Long, ByVal szCmdLine As String, _
    ByVal szOutput As String, ByVal iSize As Integer) As Integer
    
' ファイルコピー
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _
    (ByVal lpExistringFileName As String, ByVal lpNewFileName As String, _
    ByVal bFailIfExists As Long) As Long

Public Sub データコピーと解凍()
    ' C:\にあるLZHファイルをデータベースのあるフォルダにコピーして
    ' 解凍します。
    
    Dim szOutput As String * 8000
    Dim Tmp As Variant
    Dim intWindowHandle As Long
    Dim Lhastrings As String
    Dim strSrc, strDst, lngRtn As Long
    Dim Cur_Folder As String
    
    Const LZHname As String = "ken_all.lzh"
    ' データベースのあるフォルダ名の取得
    Cur_Folder = PickFolder(CurrentDb.Name)
    ' C:\からコピー
    strSrc = "C:\" & LZHname
    strDst = Cur_Folder & "\" & LZHname
    lngRtn = CopyFile(strSrc, strDst, False)
    ' カレントフォルダをデータベースのあるフォルダに変更
    ChDir (Cur_Folder)
    ' Unlha32.dllで解凍
    intWindowHandle = Application.hWndAccessApp
    Lhastrings = "e " & LZHname
    Tmp = Unlha(intWindowHandle, Lhastrings, szOutput, Len(szOutput))
    
End Sub

Function PickFolder(FileName As String) As String
    'フルパスのファイル名からフォルダを取り出す関数
    '例:pickFolder("C:\秀和\パワーガイド\例題.mdb"は、
    '   "C:\秀和\パワーガイド"を返します
    
    Dim wlen As Integer, i As Integer, j As Integer
    
    wlen = Len(FileName)    'ファイル名の長さを得る
    'iをファイル名の長さから1まで逆にカウントし繰り返す
    For i = wlen To 1 Step -1
        'FileNameのi文字から"\"があるかを調べる
        j = InStr(i, FileName, "\")
        If j <> 0 Then          '見つかったら
            Exit For            'Loopを抜ける
        End If
    Next i
    '最初の文字まで探して"\"が見つからなかったら
    If j = 0 Then
        PickFolder = ""     '長さ0の文字列を返す
    Else
        '"\"が3文字目だったらはじめから3文字を返す
        If j = 3 Then
            PickFolder = Mid$(FileName, 1, 3)
        'そうでなければはじめから最後の"\"の前までを返す
        Else
            PickFolder = Mid$(FileName, 1, j - 1)
        End If
    End If
End Function



▼ページトップに戻る