過去ログ

                                Page       5
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼VBAから自己解凍書庫  ザカリー 02/8/27(火) 13:56
   ┗Re:VBAから自己解凍書庫  こうちゃん 02/8/27(火) 21:32
      ┗Re:VBAから自己解凍書庫  ザカリー 02/8/27(火) 22:53
         ┗Re:VBAから自己解凍書庫  こうちゃん 02/8/28(水) 11:30
            ┗Re:VBAから自己解凍書庫  ザカリー 02/8/28(水) 13:23
               ┗Re:VBAから自己解凍書庫  こうちゃん 02/8/28(水) 14:42
                  ┗Re:VBAから自己解凍書庫  ザカリー 02/8/28(水) 15:35
                     ┗Re:VBAから自己解凍書庫  こうちゃん 02/8/28(水) 18:18
                        ┗こうちゃんさん、解決しました。  ザカリー 02/8/28(水) 21:31

 ───────────────────────────────────────
 ■題名 : VBAから自己解凍書庫
 ■名前 : ザカリー
 ■日付 : 02/8/27(火) 13:56
 -------------------------------------------------------------------------
   Excel VBAからdllを呼び出す、LZH圧縮ファイルの作成はようやく出来た
のですが、自己解凍書庫の作成ができませんでした。

win32.SFXで、初期表示解凍先ディレクトリと、古いファイルの更新を
を、VBA上から指定することはできないでしょうか?

Const FlNam = "C:\My Documents\*"
Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh"
Command = "a -a1 -r2 -x1 -jp1 -jm4 " + """" + LzNam + """" + " " + """" + FlNam + """"
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/8/27(火) 21:32  -------------------------------------------------------------------------
   ザカリー さん、こんにちは

お役にたつかどうかわかりませんが、こちらのサイトでUNLHA32 APIのヘルプファイルがダウンロードできますので、参照してみてください。
http://www.wakusei.ne.jp/archiver/dev/ulhahl32.html
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : ザカリー  ■日付 : 02/8/27(火) 22:53  -------------------------------------------------------------------------
   ▼こうちゃんさん、こんばんわ。
実は質問の前から、そこのヘルプをダウンロードしていたのですが、
以下のコマンドですと、カレントディレクトリ(C:\)の解凍だけで、
解凍先の変更が不可能になったり、-x1スイッチを外すと、
ディレクトリが構築されずに、(元の書庫ファイルはディレクトリ情報があるが)
意図した目的に達せずにいます。

Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh"
Const FlNam = "C:\WINDOWS\デスクトップ\"
Command = "s -a1 -r2 -jp1 -x1 -gw " & """" & LzNam & """" & " " & """" & FlNam & """"

VBAの質問から外れてきていてすみません。
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/8/28(水) 11:30  -------------------------------------------------------------------------
   ザカリー さん、こんにちは

自己解凍書庫の解凍時の指定には"$"ファイルを使用します。

たとえば以下ようなテキストを作成して、ファイル名を $ として保存し、LZHに含めます。

$WindowTitle=testtesttest
$InstallTitle=インストールするフォルダ(&D)
$InstallDir=d:\test

そのLZHからSFXを作成すると、$ファイルに指定した条件が解凍時設定されます。
# $ファイルは解凍されません。

詳細は前述HELPの「$ファイルコマンド説明」を参照してください。

ところで、このオプションだと、SFX作成ダイアログが開いちゃいませんか?
s -a1 -r2 -jp1 -x1 -gw

SFX作成時には、このあたりでいいんじゃないですか?
s -x1 -gw2

#私の知識は昔のLHA.EXEの知識がベースになっています。
UNLHA32.DLLはVBAからは使ったことがないんで、間違っていることもあるかもしれません。
一応ここにかいていることは簡単なテストはしてますが、間違いがあったらごめんなさい。
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : ザカリー  ■日付 : 02/8/28(水) 13:23  -------------------------------------------------------------------------
   こうちゃんさん、こんにちわ!

>ところで、このオプションだと、SFX作成ダイアログが開いちゃいませんか?
>s -a1 -r2 -jp1 -x1 -gw

どういう訳か、今までSFX作成ダイアログが一度も開いた事がありません。
スイッチの設定が悪いのか、何か他の要因があるのか判断できずにいます。
何か参照設定等が必要なのでしょうか。

s -x1 -gw2 のスイッチですと、自己解凍ファイル作成中に、デスクトップ画面全体
が揺れるように乱れる現象が現れます。-jp1スイッチを挿入すると、LZHマウス
ポインタアイコンのみが表示され、静かに動作します。
(いずれにしても、プログレスバーは表示された事もありません。)

出来上がった自己解凍ファイルを開き、"C:\WINDOWS\デスクトップ\"を
解凍先ディレクトリに指定しても、あるいは、
$ファイルにて、<展開先初期値>を、$InstallDir="C:\WINDOWS\デスクトップ\" 
と設定しても、C:\にしか解凍されません。
D:\ に設定した場合、正しくD:\ に解凍されます。

当方の環境はWindows98,Excel2000SR2です。
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/8/28(水) 14:42  -------------------------------------------------------------------------
   ザカリー さん、こんにちは

すみません、いま手元にWin98がないので、再現ができません。
当方WinNT4.0Sp6aです・・

スイッチを "s -x1 -gw0 " や "s -x1 -gw1 " にした場合の動作はどうでしょう。

私の感覚では、SFX作成時には a r jp は使わないのではないかと思うのですが?

ところで、UNLHA32.DLLの呼び出し部のコード等も見せていただけませんか。

Win98がないので、これ以上お役に立てるかどうかわかりませんが・・・(^^;)
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : ザカリー  ■日付 : 02/8/28(水) 15:35  -------------------------------------------------------------------------
   こうちゃんさん、何度もすみません。

スイッチ "s -x1 -gw0 "の場合、作成中、画面乱れがあり、
「skiped MS-DOSで扱えない名前のファイルです。」と表示され、
自己解凍は作成されませんでした。

スイッチ "s -x1 -gw1 "の場合、作成中、画面乱れがあり、
自己解凍は作成されますが、解凍先"C:\WINDOWS\デスクトップ\
指定でも、C:\に解凍されました。

'Declaration

Private Declare Function Unlha Lib "unlha32" ( _
  ByVal hWnd As Long, _
  ByVal szCmdLine As String, _
  ByVal szOutput As String, _
  ByVal dwSize As Long) As Long


Sub LZH() 'LZH書庫作成

Dim Result As Integer
Dim Command As String
Dim RetMsg As String * 255

Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh"
Const FlNam = "C:\My Documents\*"

  Command = "a -a1 -r2 -x1 -jp1 -jm4 " & """" & LzNam & """" & " " & """" & FlNam & """"
  Result = Unlha(vbNull, Command, RetMsg, 255)
  
  If Result = 0 Then
  MsgBox RetMsg, vbInformation, "LZH 圧縮完了"
  Else
  MsgBox RetMsg, vbCritical, "LZH 圧縮失敗"
  End If

End Sub


Sub LZH_2() '自己解凍作成(問題のコード)

Dim Result As Integer
Dim Command As String
Dim RetMsg As String * 255

Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh"
Const FlNam = "C:\WINDOWS\デスクトップ\"
  
  Command = "s -jp1 -x1 -gw3 " & """" & LzNam & """" & " " & """" & FlNam & """"
  Result = Unlha(vbNull, Command, RetMsg, 255)
  
  If Result = 0 Then
  MsgBox RetMsg, vbInformation, "自己解凍変換完了"
  Else
  MsgBox RetMsg, vbCritical, "自己解凍変換失敗"
  End If

End Sub
 ───────────────────────────────────────  ■題名 : Re:VBAから自己解凍書庫  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/8/28(水) 18:18  -------------------------------------------------------------------------
   ザカリー さん、こんにちは

ウィンドウハンドルに、vbNullを渡していますが、0 で試験してみてください。

Result = Unlha(0, Command, RetMsg, 255)

本来はエクセルのウィンドウハンドルを渡すのですが、NULLでもいいことになっていますよね。
でもその場合でもvbNull渡すと挙動不信になっちゃいます。
Win98ではどうでしょか(?_?)
 ───────────────────────────────────────  ■題名 : こうちゃんさん、解決しました。  ■名前 : ザカリー  ■日付 : 02/8/28(水) 21:31  -------------------------------------------------------------------------
   ▼こうちゃん さん:

>ウィンドウハンドルに、vbNullを渡していますが、0 で試験してみてください。
>Result = Unlha(0, Command, RetMsg, 255)

ご指摘の通りでした。プログレスバーが表示された瞬間は
感激しました。本当に有難うございます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 5