カレントファイルを圧縮する

  UNLHA32.DLL を使用する。



まずは、インストールしなければなりませんので最新版をダウンロードします。

パッケージの中に、COMMAND.TXT という 圧縮用のコマンドライン説明があるので
目を通しておきます。


  

 コマンド書式は次のようなものとなります。

    [<command>] [[-<switch>[+|-|0|1|2]]...] <archive_file_name>[.LZH]
      [[<base_directory_name>\] [<path_name>|<wild_name>]...]]...

  





  圧縮作業をする為の関数を作成



  

typedef UINT (CALLBACK* LPFUNC)(const HWND _hwnd, LPCSTR _szCmdLine,LPSTR _szOutput, const DWORD _dwSize);
// ******************************************************************
// UNLHA32.DLL の呼び出し
// ******************************************************************
void
Unlha( HWND hWnd, char *CmdLine )
{
	HINSTANCE	lib;
	LPFUNC		Lha;

	lib = LoadLibrary( "UNLHA32.DLL" );
	if ( lib == NULL ) {
		MessageBox( hWnd, "UNLHA32.DLLのロードに失敗しました", "MyMEMO", MB_OK );
		return;
	}

	Lha = (LPFUNC)GetProcAddress( lib, "Unlha" );
	if ( Lha == NULL ) {
		FreeLibrary( lib );
		MessageBox( hWnd, "Unlha のアドレスの取得に失敗しました", "MyMEMO", MB_OK );
		return;
	}

	char *ret = new char[4096]; 

	Lha(NULL, CmdLine, ret, 4096 );
	FreeLibrary( lib );

	delete [] ret;

}

  




  宣言

  

void Unlha( HWND hWnd, char *CmdLine );

  



  「圧縮して保存」としてメニューを作成する

  

case IDM_FREEZE:
	if ( buffer[0] == 0x00 ) {
		MessageBox(hWnd,"ファイル名が指定されていません","MyMEMO", MB_OK );
		return 0;
	}
	break;

  



  圧縮先を参照する為のダイアログ

#include "shlobj.h"

「グローバル変数」

BROWSEINFO bi;
LPITEMIDLIST lpi;
char DisplayName[MAX_PATH];

  
実装


case IDM_FREEZE:
	if ( buffer[0] == 0x00 ) {
		MessageBox(hWnd,"ファイル名が指定されていません","MyMEMO", MB_OK );
		return 0;
	}
	bi.hwndOwner		= hWnd;
	bi.pidlRoot		= NULL;
	bi.pszDisplayName	= DisplayName;
	bi.lpszTitle		= "カレントファイルの圧縮先";
	bi.ulFlags		= BIF_RETURNONLYFSDIRS;
	bi.lpfn			= NULL;
	bi.lParam		= 0;
	bi.iImage		= 0;
	lpi = SHBrowseForFolder( &bi );

	break;
  



  情報をまとめて、圧縮関数を実行する

  

case IDM_FREEZE:
	if ( buffer[0] == 0x00 ) {
		MessageBox(hWnd,"ファイル名が指定されていません","MyMEMO", MB_OK );
		return 0;
	}
	bi.hwndOwner		= hWnd;
	bi.pidlRoot			= NULL;
	bi.pszDisplayName	= DisplayName;
	bi.lpszTitle		= "カレントファイルの圧縮先";
	bi.ulFlags			= BIF_RETURNONLYFSDIRS;
	bi.lpfn				= NULL;
	bi.lParam			= 0;
	bi.iImage			= 0;
	lpi = SHBrowseForFolder( &bi );
	if ( lpi != NULL ) {
		SHGetPathFromIDList( lpi, DisplayName );

		char *ptr;
		ptr = strrchr( buffer, '\\' );
		lstrcpy( work, ptr+1 );
		ptr = strrchr( work, '.' );
		*ptr = 0x00;

		sprintf( CmdBuffer, "u %s \"%s\\\" \"%s\"", work, DisplayName, buffer );
		Unlha( hWnd, CmdBuffer );
	}

	break;
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ