makecabでCab圧縮


VB Tips And Sample(HOME)(戻る)


-----------解説--------------------------------------------
XP_proのコマンドプロンプトでmakecab /?
とすると以下の情報が得られます。
この情報を元に、
VB6でバッチフィルを作成し、実行するプログラムです。


Microsoft (R) Cabinet Maker - Version 5.1.2600.0
Copyright (c) Microsoft Corporation. All rights reserved..

MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination]
MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...]

  source         File to compress.
  destination    File name to give compressed file.  If omitted, the
                 last character of the source file name is replaced
                 with an underscore (_) and used as the destination.
  /F directives  A file with MakeCAB directives (may be repeated).
  /D var=value   Defines variable with specified value.
  /L dir         Location to place destination (default is current directory).
  /V[n]          Verbosity level (1..3).


フォームへ記入
プロジェクトの始まりスタートは、モジュールから行うようにする。
プロジェクトのプロパティーでSub Mainをスタートアップに指定する。

Option Explicit
Dim clo As Long

Public Sub 実行()
  
     '実行
      Dim ret
バッチファイルを実行する
      ret = Shell(App.Path & "\圧縮実行.bat")
      
  Do
     DoEvents
  Loop Until clo = 20
  
  Unload Form1
    
End Sub
Private Sub Timer1_Timer()
  
  clo = clo + 1
  Form1.ProgressBar1.Value = Form1.ProgressBar1.Value + 5
End Sub



モジュールへ記入
Attribute VB_Name = "Press"
Option Explicit
Dim stBatTxt As String
Sub Main() 'ここからプログラムが始まる

   stBatTxt = "" '一応初期化しておく

   'ドラッグドロップしたファイルのフルパスが「Command$」にはいる。
   If Command$ = "" Then
       Exit Sub
   End If



   Dim stret As String

   '文字列として作成していく 「"文字列"」として取得される
   stret = NewNuki(Command$)
   
'   stret = NewNuki("C:\Documents and Settings\kouji\デスクトップ\vb6compress\1readme")
'   Debug.Print "makecab " & """" & Trim("C:\Documents and Settings\kouji\デスクトップ\vb6compress\1readme") & """" & " " & """" & Trim(stret) & """"
   'これでBAT文字列を作成する
   stBatTxt = "makecab " & Trim(Command$) & " " & """" & Trim(stret) & """"
'   MsgBox Trim(stret)
   
  
   'これは何をしているのだっけ?
   stBatTxt = Replace(stBatTxt, vbCrLf, "", , 1)
    
  'バッチフィルを作成
  Dim FileNum As Integer
  FileNum = FreeFile
  'batファイル作成
  Open App.Path & "\圧縮実行.bat" For Output As #FileNum
     Print #FileNum, stBatTxt
  Close #FileNum

  Form1.Show 0
  Form1.実行


  'バッチファイルを消しておく
   Kill App.Path & "\圧縮実行.bat"
 
End Sub
Private Function NewNuki(ByVal moji As String) As String
'とにかく一番後ろの\の後の文字を取得する
Dim splitStr() As String
Dim lngstr As Long '配列の最大の添字
Dim kaku As Long

'配列に取得
splitStr() = Split(moji, "\")

'配列の最大の添字を取得 SP6でモリリークはなくなったのかな?
lngstr = UBound(splitStr)

If InStr(splitStr(lngstr), ".") <> 0 Then
    '. 拡張子があれば    それ以降をcabにする
    kaku = InStr(splitStr(lngstr), ".")
    NewNuki = App.Path & "\" & Left(splitStr(lngstr), kaku - 1) & ".cab"
Else
   '拡張子がなければ.cabをつけ足す
    NewNuki = App.Path & "\" & Left(splitStr(lngstr), Len(splitStr(lngstr)) - 1) & ".cab"
End If


End Function





©  2004 I Love Balard. All Rights Reserved.

VB Tips And Sample(HOME)(戻る)