⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xacrett.cpp

📁 一个解压程序,只要设定了解压路径和解压文件的种类,就可以随意解压
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//-- extract ---------------//
//-- ||       偞  ----------//
//-- xetract -  偔  --------//
//--  |  |   ---  傟  ------//
//-- xatrect -----  偭  ----//
//--   |  |  -#039--  偲  --//
//-- xacrett ---------     -//

// xacrett.cpp
// 丂xacrett偺庡梫晹暘偱偡丅
// 丂偙偙偐傜奺庬暅尦儖乕僠儞摍偑屇傃弌偝傟傑偡丅

/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/

// 昁恵僿僢僟
#include "stdafx.h"
#include "kiutil.h"
#include "resource.h"
#include "ueutil.h"
//#include "resrc1.h"	//added by uema2.
#include "cfgdlg.h"	//added by uema2.
#include "conv.h"	//added by uema2.

// 暅尦儖乕僠儞
#include "Tool.h"

#include "LzhTool.h"
#include "ZipTool.h"
#include "ArjTool.h"
#include "RarTool.h"
//#include "AceTool.h"
#include "TarTool.h"
#include "GzTool.h"
#include "Bz2Tool.h"
#include "CompressZTool.h"
//#include "BgaTool.h"
//#include "JakTool.h"
//#include "IshTool.h"
#include "MimeTool.h"
//#include "UnixDecoderTool.h"
//#include "HqxTool.h"
//#include "MSCompressTool.h"
//#include "ZooTool.h"
//#include "ArcTool.h"
//#include "FrzTool.h"
//#include "PackzTool.h"
//#include "CompactCTool.h"
//#include "BelTool.h"
//#include "ArgTool.h"
//#include "CptTool.h"
#include "ImpTool.h"
//#include "PitTool.h"
//#include "QPakTool.h"
//#include "SplTool.h"
//#include "BooTool.h"
//#include "AtoBTool.h"
//#include "SharTool.h"
//#include "FishTool.h"
//#include "RezTool.h"
//#include "JamTool.h"
//#include "AsdTool.h"
//#include "ArTool.h"
//#include "CpioTool.h"
//#include "GPLTool.h"

// 僌儘乕僶儖曄悢
static CTool* g_pToolList = NULL;
static char   g_DestDir[MAX_PATH];
static bool   g_bOpen, g_bMake, g_bDlg;

static int    g_nError[3] = {0,0,0};
enum { NOT_A_FILE, UNSUPPORTED, FAILED };

#define DATALOADSIZE (65536*4)
static unsigned char* g_pWorkSpace = NULL;

static HANDLE g_Inst=NULL; // by uema2.

/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/

// 愝掕夋柺屇傃弌偟乧偲偄偆偲奿岲偄偄偑丄幚偼 /////////////////////////////
// 偨偩弌椡愭僨傿儗僋僩儕傪慖傇僟僀傾儘僌傪弌偡偩偗丅 /////////////////////

static int CALLBACK OpenFolderProc
			( HWND wnd, UINT msg, LPARAM lp, LPARAM select )
{
	if( msg==BFFM_INITIALIZED && select!=0 )
	{
		// 弌椡愭僨傿儗僋僩儕偺僟僀傾儘僌偼懚嵼偟側偄偺偱
		// 偲傝偁偊偢僐儊儞僩傾僂僩 by uema2.
//		SendMessage( wnd, BFFM_SETSELECTION, TRUE, select );
		kiutil::wndFront( wnd );
	}
	return 0;
}

static bool Configuration( char* dirname )
{
/*	// 峔憿懱偵Set!
	BROWSEINFO bi;
	memset( &bi,0,sizeof(bi) );
	bi.pszDisplayName	= dirname;
	bi.lpszTitle		= "Please Choose A Destination Directory.";
	bi.ulFlags			= BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN;
	bi.lpfn				= OpenFolderProc;
	bi.lParam			= (LPARAM)dirname;

	// 屇傃弌偟
	ITEMIDLIST* id = SHBrowseForFolder( &bi );
	if( id==NULL )
		return false;
	SHGetPathFromIDList( id,dirname );

	// 儊儌儕夝曻
	IMalloc* pMalloc;
	SHGetMalloc( &pMalloc );
	pMalloc->Free( id );
	pMalloc->Release();
*/	return true;
}

// Shift婲摦偟偨偲偒偺丄 //////////////////////////////////////////////////
// 暅尦儖乕僠儞慖戰夋柺梡CallBack娭悢 /////////////////////////////////////

static BOOL CALLBACK TypeProc( HWND dlg,UINT msg,WPARAM wp,LPARAM lp )
{
	TCHAR t_Routine[256];  //by uema2.

	switch( msg )
	{
	case WM_INITDIALOG:
		{
			SendDlgItemMessage( dlg,IDC_COMBO,CB_ADDSTRING,
//									0,(LPARAM)" (Auto-Detect)" );
									0,(LPARAM)L" (Auto-Detect)" ); // by uema2.
			SendDlgItemMessage( dlg,IDC_COMBO,CB_SETITEMDATA,0,NULL );

			for( CTool* p=g_pToolList; p!=NULL; p=p->GetNext() )
			{
				//p->GetRoutineName()傪TCHAR偵 by uema2.
				_MultiByteToWideChar(CP_ACP, 0, p->GetRoutineName(), strlen(p->GetRoutineName())+1,
					t_Routine, strlen(p->GetRoutineName())+1);

				int i=SendDlgItemMessage( dlg,IDC_COMBO,CB_ADDSTRING,
//										0,(LPARAM)p->GetRoutineName() );
										0,(LPARAM)t_Routine );
					  SendDlgItemMessage( dlg,IDC_COMBO,CB_SETITEMDATA,
										i,(LPARAM)p );
			}

			kiutil::wndFront( dlg );
			SendDlgItemMessage( dlg,IDC_COMBO,CB_SETCURSEL,0,0 );
			SetFocus( GetDlgItem(dlg,IDC_COMBO) );
		}
		return TRUE;

	case WM_COMMAND:
		if( LOWORD(wp)==IDOK )
		{
			int i=SendDlgItemMessage(dlg,IDC_COMBO,CB_GETCURSEL,0,0);
			EndDialog( dlg,
				SendDlgItemMessage( dlg,IDC_COMBO,CB_GETITEMDATA,i,0 ) );
		}
		return TRUE;
	}
	return FALSE;
}

// 僼傽僀儖堦屄張棟偡傞 ///////////////////////////////////////////////////
// 張棟 亖 暅尦 or 暅尦儖乕僠儞妋擣 ///////////////////////////////////////

class CInfoDlg // 壗傕偟側偄忬嫷昞帵僟僀傾儘僌(娋
{
public:

	CInfoDlg( const char* fname, CTool* p )
		{
			// 忬嫷昞帵僟僀傾儘僌梡僨乕僞弶婜壔
			m_bFlagEnd = true;
			m_Han = NULL;
			strcpy( m_FName, fname );
			strcpy( m_RName,"XacRett: ");
			strcat( m_RName, p->GetRoutineName() );
		}

	void Start()
		{
			// 廔椆僼儔僌傪僆僼
			m_bFlagEnd = false;

			// 僗儗僢僪嶌惉
			DWORD id;
			m_Han = CreateThread( NULL, 0, Thread, this,
									CREATE_SUSPENDED, &id);
			if( m_Han )
			{
				// 嶌惉偵惉岟偟偨傜丄桪愭搙傪 IDLE 偵偟偰僗僞乕僩
				SetThreadPriority( m_Han, THREAD_PRIORITY_IDLE );
				ResumeThread( m_Han );
			}
			else
				// 幐攕偟偨傜丄廔椆僼儔僌傪棫偰偰偍偔
				m_bFlagEnd=true;
		}

	~CInfoDlg()
		{
			// 廔椆僼儔僌偑棫偭偰偄側偄応崌
			if( !m_bFlagEnd )
			{
				// 僼儔僌傪棫偰偰
				m_bFlagEnd = true;

				// 僗儗僢僪廔椆傑偱懸婡
				for( DWORD ec=STILL_ACTIVE; ec==STILL_ACTIVE; )
				{
					if( !GetExitCodeThread( m_Han, &ec ) )
						break;
					Sleep(50);
				}

				// 僴儞僪儖夝曻
				CloseHandle( m_Han );
			}
		}

private:
	char m_FName[300], m_RName[300];
	volatile bool m_bFlagEnd;
	volatile HANDLE m_Han;

	static DWORD WINAPI Thread( void* param )
		{
			HWND dlg = CreateDialogParam( GetModuleHandle(NULL),
										  MAKEINTRESOURCE(IDD_INFDLG),
										  NULL, Proc, (LPARAM)param );

			// 廔椆僼儔僌偑棫偭偰偄側偄娫儊僢僙乕僕儖乕僾
			for( MSG msg;
				 !((CInfoDlg*)param)->m_bFlagEnd;
				 PeekMessage(&msg,0,0,0,PM_REMOVE) )
			{
				TranslateMessage( &msg );
				DispatchMessage( &msg );
			}

			// 廔椆僼儔僌偑棫偭偨傜僗儗僢僪廔椆
			DestroyWindow( dlg );
			ExitThread( 0 );
			return 0;
		}

	static BOOL CALLBACK Proc( HWND dlg, UINT msg, WPARAM wp, LPARAM lp )
		{
			TCHAR t_m_RName[256], t_m_FName[256]; // by uema2.

			if( msg==WM_INITDIALOG )
			{
				CInfoDlg* p = (CInfoDlg*)lp;
				SetWindowLong( dlg,GWL_USERDATA,lp );
				//p->m_RName偲p->m_FName傪TCHAR偵 by uema2.
				_MultiByteToWideChar(CP_ACP, 0, p->m_RName, strlen(p->m_RName)+1,
					t_m_RName, strlen(p->m_RName)+1);
				_MultiByteToWideChar(CP_ACP, 0, p->m_FName, strlen(p->m_FName)+1,
					t_m_FName, strlen(p->m_FName)+1);

//				SetWindowText( dlg,p->m_RName );
//				SetWindowText( GetDlgItem(dlg,IDC_FNAME), p->m_FName );
				SetWindowText( dlg,t_m_RName );	// by uema2.
				SetWindowText( GetDlgItem(dlg,IDC_FNAME), t_m_FName );	// by uema2.
				ShowWindow( dlg,SW_SHOW );
				UpdateWindow( dlg );
			}
//			else if( (msg==WM_SYSCOMMAND && (wp==SC_CLOSE||wp==SC_DEFAULT))
			else if( (msg==WM_SYSCOMMAND && wp==SC_CLOSE) // by uema2.
					|| (msg==WM_COMMAND && LOWORD(wp)==IDCANCEL) )
				return TRUE;
			return FALSE;
		}
};

static void ProcessFile( char* fname, CTool* p, bool bCheckOnly )
{
	if( p==NULL )
	{
		// 僿僢僟偭傐偄偁偨傝傪撉崬
		FILE* fp=fopen( fname,"rb" );
		if( !fp )
		{
			g_nError[ NOT_A_FILE ]++;
			return;
		}

		int read = fread( CTool::common_buf,1,XACR_BUFSIZE,fp );
		fseek( fp,0,SEEK_END );
		int fsize = ftell( fp );
		fclose( fp );

		if( fsize>0 )
		{
			// 傑偢奼挘巕偱峣偭偰彂屔僞僀僾傪寛掕
			const char* ext=kiutil::pathExt( fname );

			CTool *e=NULL;
//			if( stricmp(ext,"exe") )
			if( strcmp(ext,"exe") ) // by uema2.
			{
				for( e=g_pToolList; e!=NULL; e=e->GetNext() )
				{
					if( e->IsType(ext) )
					{
						if( e->Check( fname, fsize ) )
							p=e;
						break;
					}
				}
			}

			// 偦傟偱偩傔側傜慡専嶕
			if( p==NULL )
			{
				for( p=g_pToolList; p!=NULL; p=p->GetNext() )
					if( p!=e && p->Check( fname,fsize ) )
						break;
			}
		}
	}

	// LongFileName庢摼
	WIN32_FIND_DATA find;
	TCHAR t_fname[MAX_PATH]; // by uema2.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -