📄 xacrett.cpp
字号:
//-- 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 + -