全然更新しないブログ
HSPメモ帳
mod_MSZip - 1 / 3
mod_MSZip - 1 / 3 - 2 / 3 - 3 / 3
mod_MSZip
mod_MSZip.hspは、Cabinet.dllを使用した圧縮解凍モジュールです。
mod_MSZip.hsp
#ifndef MOD_MSZIP_HSP #define global MOD_MSZIP_HSP #include "kernel32.as" #module mod_MSZip #uselib "Cabinet.dll" #func global CreateCompressor "CreateCompressor" int,int,var #func global CloseCompressor "CloseCompressor" int #func global Compress "Compress" int,var,int,int,int,var #func global CreateDecompressor "CreateDecompressor" int,int,var #func global CloseDecompressor "CloseDecompressor" int #func global Decompress "Decompress" int,var,int,int,int,var #uselib "Crypt32.dll" #func global CryptBinaryToString "CryptBinaryToStringA" var,int,int,int,var #func global CryptStringToBinary "CryptStringToBinaryA" sptr,int,int,int,var,int,int #deffunc MSZipComp int size, var src, var dst ds = 0 if ( size ){ ss = size } else { ss = varsize(src) } CreateCompressor 2, 0, hComp if ( stat ){ Compress hComp, src, ss, 0, 0, ds GetLastError if ( stat == 122 ){ sdim buf, ds Compress hComp, src, ss, varptr(buf), ds, ds if ( stat ){ sdim dst, ds : memcpy dst, buf, ds } else { ds = 0 } buf = 0 } CloseCompressor hComp } return ds #deffunc MSZipDecomp int size, var src, var dst ds = 0 if ( size ){ ss = size } else { ss = varsize(src) } CreateDecompressor 2, 0, hComp if ( stat ){ Decompress hComp, src, ss, 0, 0, ds GetLastError if ( stat == 122 ){ sdim buf, ds Decompress hComp, src, ss, varptr(buf), ds, ds if ( stat ){ sdim dst, ds : memcpy dst, buf, ds } else { ds = 0 } buf = 0 } CloseDecompressor hComp } return ds #deffunc MSZipCompFile str src, str dst exist src if ( strsize == -1 ){ return 0 } ss = strsize : sdim s, ss : bload src, s, ss MSZipComp ss, s, d : ds = stat if ( ds ){ bsave dst, d, ds } s = 0 : d = 0 return ds #deffunc MSZipDecompFile str src, str dst exist src if ( strsize == -1 ){ return 0 } ss = strsize : sdim s, ss : bload src, s, ss MSZipDecomp ss, s, d : ds = stat if ( ds ){ bsave dst, d, ds } s = 0 : d = 0 return ds #deffunc MSZipToCode int size, var src, var dst if ( size ){ ss = size } else { ss = varsize(src) } MSZipComp ss, src, d if ( ds == 0 ){ return 0 } ss = 0 CryptBinaryToString d, ds, 1, 0, ss if ( stat ){ sdim dst, ss CryptBinaryToString d, ds, 1, varptr(dst), ss if ( stat == 0 ){ ss = 0 } } d = 0 if ( ss == 0 ){ return 0 } return ss - 1 #deffunc MSZipFromCode str src, var dst CryptStringToBinary src, 0, 1, 0, ds, 0, 0 if ( stat == 0 ){ return 0 } sdim d, ds CryptStringToBinary src, 0, 1, varptr(d), ds, 0, 0 if ( stat ){ MSZipDecomp ds, d, dst } d = 0 return ds #global #endif // MOD_MSZIP_HSP
サンプル
#include "mod_MSZip.hsp" #include "shell32.as" title "sample - mod_MSZip.hsp ( ファイルドロップ可 )" objmode 2 : font "consolas", 14 oncmd gosub *DROPFILES, 0x0233 DragAcceptFiles hwnd, 1 x = ginfo_winx / 2 objsize x, 32 strBtn = "圧縮", "解凍" pos 0, 0 : button gosub strBtn(0), *LB_COMP pos x, 0 : button gosub strBtn(1), *LB_DECOMP sdim mb, 1024 * 64 pos 0, 32 : mesbox mb, ginfo_winx, ginfo_winy - 32 : idmb = stat stop *LB_COMP *LB_DECOMP type = stat dialog , 16 if ( stat != 1 ){ return -1 } filename = refstr *LB_COMP2 *LB_DECOMP2 ret = 0 exist filename size = strsize if ( size == -1 ){ mbtmp = strf("%s ファイルが存在しません\n", filename) ret = -1 } else { sdim src, size + 1 bload filename, src, size if ( type ){ MSZipDecomp size, src, dst } else { MSZipComp size, src, dst } dstSize = stat if ( dstSize ){ dialog , 17 if ( stat == 1 ){ bsave refstr, dst, dstSize } f = 1.0 * dstSize / Size * 100 mbtmp = strf("%s size: %dByte -> %dByte(%.2f)%% %sしました\n", filename, size, dstSize, f, strBtn(type)) if ( type == 0 ){ dialog "テキスト化しますか?", 2, "確認" if ( stat == 6 ){ MSZipToCode size, src, dst mb = strf("mszip = {\"%s\"}\n", dst) + mb objprm idmb, mb } } ret = 1 } else { mbtmp = strf("%s %sできませんでした\n", filename, strBtn(type)) } } mb = mbtmp + mb objprm idmb, mb return ret *DROPFILES sdim filename, 520 DragQueryFile wparam, 0, varptr(filename), 520 if ( stat ){ exist filename type = 1 : gosub *LB_DECOMP2 if ( ret == 0 ){ type = 0 : gosub *LB_COMP2 } } DragFinish wparam return
コメント ( 0 ) | Trackback ( 0 )
« WebView2 1.0.... | mod_MSZip - 2... » |
コメント |
コメントはありません。 |
コメントを投稿する |