#uselib "unzip32"
#func UnZip "UnZip" nullptr, str, int, int
#func UnZipGetFileCount "UnZipGetFileCount" str
#func UnZipGetVersion "UnZipGetVersion"
#include "hspext.as"
sdim path,512
#uselib "ole32.dll"
#func global CoTaskMemFree "CoTaskMemFree" int
#uselib "shell32.dll"
#cfunc global SHBrowseForFolder "SHBrowseForFolder" var
#func global SHGetPathFromIDList "SHGetPathFromIDList" int, var
#module
#deffunc seldir var dirpath, str msg, local h, local ttl, local binfo
sdim ttl, strlen(msg) + 1
ttl = msg
binfo = hwnd, 0, varptr(dirpath), varptr(ttl), 0x0001, 0, 0, 0
h = SHBrowseForFolder(binfo)
if h = 0 : return 0
SHGetPathFromIDList h, dirpath
CoTaskMemFree h
return 1
#global
; unzip32.dllが存在するか簡易チェック
if varptr(UnZipGetVersion) = 0 {
dialog "unzip32.dll が見つからん"
end
}
sdim filepath, 256
sdim outpath, 256
sdim szOutput,1024
filepath="None"
outpath="None"
button "解凍", *unpack
button "情報", *info
button "ファイル数", *count
button "バージョン", *version
pos 0,120
objsize 100, 24
button "ZIPファイル選択", *sentaku1
button "出力フォルダ選択", *sentaku2
*a
redraw 2
color 255,255,255:boxf
color 0,0,0
pos 110,123
mes "ZIPファイル : "+filepath+""
pos 110,145
mes "出力フォルダ : "+outpath+""
wait 1
redraw 1
goto *a
stop
*sentaku1
dialog "zip" , 16 , ""
if stat!0:filepath=refstr
goto *a
*sentaku2
sdim dir, 260
seldir dir, "フォルダを選択してください"
if stat {
dialog dir, , "選択フォルダ"
} else {
dialog "フォルダは選択されませんでした"
}
if stat!0{
i = 0
outpath=dir
}
goto *a
*unpack
if filepath!"None"{
if outpath!"None"{
UnZip "\""+filepath+"\" \""+outpath+"\""
dialog "解凍 : "+stat
}
}
goto *a
*info
*count
*version
こんな感じで書きました。
他の場所を参考に作ったので仕組みはあまりわかってません。
そして本題行きますが、これでフォルダー・ファイルの場所を選択したときに特定のファイル・フォルダーを選ぶと解凍しますが、それでないとエラー(32781等)が出ます。
その特定というのが、ファイルはわからなく、フォルダーはC:\以外はエラーになります。
エラーの原因を教えてくれませんか?お願いします!!