Common Archivers Library
からCAB32.DLL 開発者 SDK v0.98をダウソしましゅ。

展開して、cab32.dllを、システムホルダに投入します。

ABのプロジェクトでウインドウリストボックス(ID=ListBox1)とボタン(ID=CommandButton1)
だけの画面を作ります。このとき、MainWndの拡張スタイルでドラッグ&ドロップを許可にします。

イカのコードをコピペします。終わり。
'-----------------------------------------------------------------------------
'  イベント [[プロシージャ]]
'-----------------------------------------------------------------------------
' この[[ファイル]]には、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ [[ハンドル]]: hMainWnd

' TODO: この位置にグローバルな変数、[[構造体]]、定数、関数を定義します。
[[Declare]] Function Cab Lib"cab32" (hwnd As HWND, cmdl As *Byte, outp As *Byte, si As DWord) As Long

[[Const]] CabCmd = "-a -ml:21"
Const ResFile = "平井公彦.log"
Const CabFile = "平井公彦.cab"

'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
  ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

  ' イベントプロシージャの呼び出しを行います。
  MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
[[End]] Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
  Cab2_DestroyObjects()
  PostQuitMessage(0)
End Sub

'ダロップ
Sub MainWnd_DropFiles(hDrop As HDROP)
  [[Dim]] k As Long, j As Long
  Dim file[MAX_PATH] As Byte
  k = DragQueryFile(hDrop, -1,NULL,0)
  For j=0 To k-1
    DragQueryFile(hDrop,j,file,MAX_PATH)
    SendMessage(GetDlgItem(hMainWnd,ListBox1), LB_ADDSTRING, 0, file)
  Next
  DragFinish(hDrop)
End Sub

'圧縮ボタン
Sub MainWnd_CommandButton1_Click()
  Dim ccmd[1000] As Byte
  Dim re[1000] As Byte
  Dim f[MAX_PATH] As Byte
  Dim hF As HANDLE
  Dim w As DWord,j As Long, k As Long,l As Long

  'レスポンスファイルを作る
  hF = CreateFile(ResFile, GENERIC_WRITE, 0, ByVal 0, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
  k = SendMessage(GetDlgItem(hMainWnd, ListBox1), LB_GETCOUNT,0,0)
  For j=0 To k-1
    l = SendMessage(GetDlgItem(hMainWnd, ListBox1),LB_GETTEXT,j,f)  
    wsprintf(ccmd, Ex"\q%s\q\r\n", f)
    WriteFile(hF, ccmd, lstrlen(ccmd), [[VarPtr]](w), ByVal 0)
  Next
  CloseHandle(hF)

  'Cab実行
  wsprintf(ccmd, "%s %s @%s", CabCmd, CabFile, ResFile)
  Cab(hMainWnd, ccmd, re, 999)
  [[Kill]] ResFile
  MessageBox(hMainWnd, re, "mes", MB_OK)
End Sub

注意:プロジェクト名をCab2にしないとコンパイルが通らないという猛烈なバグがあります。

タグ:

+ タグ編集
  • タグ:
最終更新:2010年01月24日 15:48