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

📄 xacrett.cpp

📁 一个解压程序,只要设定了解压路径和解压文件的种类,就可以随意解压
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	//fname傪TCHAR偵 by uema2.
	_MultiByteToWideChar(CP_ACP, 0, fname, strlen(fname)+1,
		t_fname, strlen(fname)+1);

//	HANDLE h = FindFirstFile( fname,&find );
	HANDLE h = FindFirstFile( t_fname,&find ); // by uema2.
	if( h==INVALID_HANDLE_VALUE )
	{
		g_nError[ NOT_A_FILE ]++;
		return;
	}
	FindClose( h );

		// 僠僃僢僋偺傒偩偭偨傜偙偙偱廔傢傝
		if( bCheckOnly )
		{
//			char string[1000];
			TCHAR string[500]; //char->TCHAR by uema2.
			TCHAR t_Routine[500];
			char *temp;
			TCHAR t_temp[32];

			if( p ){
				//p->GetRoutineName()傪TCHAR偵 by uema2.
				_MultiByteToWideChar(CP_ACP, 0, p->GetRoutineName(), strlen(p->GetRoutineName())+1,
					t_Routine, strlen(p->GetRoutineName())+1);
				/////////////
				temp = (char*)LocalAlloc(LPTR, 1);
				*temp = (char)0xff;
				_MultiByteToWideChar(CP_ACP, 0, temp, strlen(temp)+1,
					t_temp, strlen(temp)+1);
				/////////////
				*t_temp = L'\\';

//				sprintf( string,"OK: \"%s\" (by %s)",
//							find.cFileName, p->GetRoutineName() );
				wsprintf( string,L"OK: \"%s\" (by %s)",
							find.cFileName, t_Routine);	// by uema2.

			}else{
//				sprintf( string,"Unsupported: \"%s\"", find.cFileName );
				wsprintf(string, L"Unsupported: \"%s\"", find.cFileName);	// by uema2.
			}
			MessageBox( NULL, string,
//				"XacRett", MB_OK|MB_ICONINFORMATION|MB_TOPMOST );
				L"XacRett", MB_OK|MB_ICONINFORMATION|MB_TOPMOST );	// by uema2.
			return;
		}

	// 旕懳墳彂屔偩偭偨傜僄儔乕
	if( p==NULL )
	{
		g_nError[ UNSUPPORTED ]++;
		return;
	}

	// 彂屔柤傪LongFileName偵抲偒姺偊偰偍偔
	// CE偼慡晹LongFileName側偺偱偼丠 by uema2.
//	int y,dummy;
//	kiutil::pathSplit( fname,&y,&dummy );
	char my_fname[MAX_PATH];
//	strcpy( my_fname, fname );
//	strcpy( &my_fname[y+1], find.cFileName );

	//find.cFileName傪char偵 by uema2.
	char* pChar = (char *)LocalAlloc(LPTR, MAX_PATH*sizeof(char));
	strcpy( my_fname, fname );
	DWORD charlength = _WideCharToMultiByte(CP_ACP, 0, find.cFileName,
						-1, NULL, 0, NULL, NULL);
	_WideCharToMultiByte(CP_ACP, 0, find.cFileName,
		-1, pChar, charlength, NULL, NULL);

	// 忬嫷昞帵僟僀傾儘僌弨旛
//	CInfoDlg inf( find.cFileName, p );
	CInfoDlg inf( pChar, p ); // by uema2.

	// 偮偄偱偵僼僅儖僟傪嶌偭偨傝丅
	char my_ddir[MAX_PATH*2];
	strcpy( my_ddir, ueutil::GetExtractPath() ); //added by uema2.
	
//	strcpy( my_ddir, g_DestDir );
//	if( *CharPrev( my_ddir, my_ddir+strlen(my_ddir) ) != '\\' )
//		strcat( my_ddir, "\\" );
	if( g_bMake )
	{
		char* x;
//		for( x=find.cFileName; *x!=0; x=CharNext(x) ) 
		for( x=pChar; *x!=0; x=ueutil::CharNext(x) ) // by uema2.
			if( *x=='.' )
				break;
		*x='\0';
//		strcat( my_ddir, find.cFileName );
//		strcat( my_ddir, "\\" );
		strcat( my_ddir, pChar ); //added by uema2.
		ueutil::CopyToFilename(pChar);

	}
	strcat( my_ddir, "\\" ); //added by uema2.
	kiutil::pathMakeAbs( my_ddir );

	TCHAR t_my_ddir[MAX_PATH*2];
	_MultiByteToWideChar(CP_ACP, 0, my_ddir, strlen(my_ddir)+1,
		t_my_ddir, strlen(my_ddir)+1); //added by uema2.
//	MessageBox(NULL, t_my_ddir, L"t_my_ddir", MB_OK);

	// 夝搥両
//	SetCurrentDirectory(  ); //by uema2.

	if( g_bDlg )
		inf.Start();
	if( !p->Extract( my_fname, my_ddir ) )
	{
		g_nError[ FAILED ]++;
		return;
	}

	// 夝搥愭傪奐偔
	if( g_bOpen )
	{
/*		char str[MAX_PATH+50] = "explorer \"";
		my_ddir[ strlen(my_ddir)-1 ]='\0';
		strcat( str, my_ddir );
		strcat( str, "\"" );
		WinExec( str,SW_SHOWDEFAULT );
*/		CreateProcess(L"explorer", t_my_ddir, NULL, NULL, FALSE,
			0, NULL, NULL, NULL, NULL); //added by uema2.
	}

	LocalFree(pChar);
}

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

//int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int )
int WINAPI WinMain(HINSTANCE hInst,
				   HINSTANCE hPrevInstance,
				   LPWSTR lpszCmdParam,
				   int nCmdShow)
{
// 弶婜壔
	KctrlInit(); //by uema2.
 
	kiutil::pathInit();
	CTool::AllocWorkSpace();
    fdinit();
	g_Inst = hInst; //added by uema2.

// 暅尦儖乕僠儞儘乕僪

	// 旕埑弅宯
/*	g_pToolList =         new CJakTool;
	g_pToolList->AddTail( new CTarTool );
	g_pToolList->AddTail( new CCpioTool );
	g_pToolList->AddTail( new CQPakTool );
	// 傢傝偲儅僩儌宯( 僠僃僢僋偑懍偄傕偺 )
//	g_pToolList->AddTail( new CYz1Tool );
	g_pToolList->AddTail( new CTgzTool );
	g_pToolList->AddTail( new CTbzTool );
	g_pToolList->AddTail( new CTaZTool );
	g_pToolList->AddTail( new CCpioGzTool );
	g_pToolList->AddTail( new CCpioBzTool );
	g_pToolList->AddTail( new CCpioZTool );
	g_pToolList->AddTail( new CMSCompressTool );
*/
	g_pToolList =         new CLzhTool;
	g_pToolList->AddTail( new CRarTool );
	g_pToolList->AddTail( new CZipTool );
	g_pToolList->AddTail( new CTgzTool );
	g_pToolList->AddTail( new CTbzTool );
	g_pToolList->AddTail( new CTaZTool );
	g_pToolList->AddTail( new CGzTool );
	g_pToolList->AddTail( new CBz2Tool );
	g_pToolList->AddTail( new CTarTool );
	g_pToolList->AddTail( new CArjTool );

/*
	// 傢傝偲儅僩儌宯( 僠僃僢僋偑抶偄傕偺 )
	g_pToolList->AddTail( new CBgaTool );
	g_pToolList->AddTail( new CLzhTool );
	g_pToolList->AddTail( new CZipTool );
	g_pToolList->AddTail( new CRarTool );
	g_pToolList->AddTail( new CAceTool );
	g_pToolList->AddTail( new CArjTool );
//	g_pToolList->AddTail( new CGcaTool );
	g_pToolList->AddTail( new CImpTool );
//	g_pToolList->AddTail( new CCabTool );
	g_pToolList->AddTail( new CZooTool );
	g_pToolList->AddTail( new CHqxTool );
	g_pToolList->AddTail( new CCptTool );
	g_pToolList->AddTail( new CPitTool );
	g_pToolList->AddTail( new CIshTool );
	// 偰偒偲乣宯
	g_pToolList->AddTail( new CAsdTool );
	g_pToolList->AddTail( new CRezTool );
	g_pToolList->AddTail( new CGzTool );
	g_pToolList->AddTail( new CBz2Tool );
	g_pToolList->AddTail( new CCompressZTool );
	g_pToolList->AddTail( new CArcTool );
	g_pToolList->AddTail( new CArgTool );
	g_pToolList->AddTail( new CSplTool );
	g_pToolList->AddTail( new CPackzTool );
	g_pToolList->AddTail( new CFrzTool );
	g_pToolList->AddTail( new CCompactCTool );
	g_pToolList->AddTail( new CArTool );
	// xacrgpl.dll強懏偺傕偺
	CGPLTool::LoadAll( g_pToolList );
	// 傎傏奼挘巕Only宯
	g_pToolList->AddTail( new CMimeTool );
	g_pToolList->AddTail( new CUueTool );
	g_pToolList->AddTail( new CXxeTool );
	g_pToolList->AddTail( new CSharTool );
	g_pToolList->AddTail( new CBooTool );
	g_pToolList->AddTail( new CFishTool );
	g_pToolList->AddTail( new CBelTool );
	g_pToolList->AddTail( new CJamTool );
	g_pToolList->AddTail( new CAtoBTool );
*/
// 愝掕傪儘乕僪
/*
	// ini僼傽僀儖柤嶌惉( 偙傟丄屻傠偺曽偱Save偵傕巊偆偺偱拲堄 )
	char ininame[MAX_PATH];
	GetModuleFileName( NULL, ininame, MAX_PATH );
	int l = strlen( ininame );
	ininame[l-3]='I', ininame[l-2]='N', ininame[l-1]='I';
*/
	// 夝搥愭僨傿儗僋僩儕
	// GetPrivateProfileString 偼CE偵偼側偄偺偱儖乕僩僨傿儗僋僩儕傪擖傟偰偍偔
	// by uema2.
	strcpy(g_DestDir, "\\");
/*
	GetPrivateProfileString( "xacr","Dir","",g_DestDir,MAX_PATH,ininame );
	if( g_DestDir[0]=='\0' )
	{
		ITEMIDLIST *pidl;
		SHGetSpecialFolderLocation( NULL, CSIDL_DESKTOPDIRECTORY, &pidl );
		SHGetPathFromIDList( pidl, g_DestDir );

		IMalloc* pMalloc;
		SHGetMalloc( &pMalloc );
		pMalloc->Free( pidl );
		pMalloc->Release();
	}

	// 塀偟愝掕俁偮
	g_bOpen = (0!=GetPrivateProfileInt( "xacr","Open",1,ininame ));
	g_bMake = (0!=GetPrivateProfileInt( "xacr","Make",1,ininame ));
	g_bDlg  = (0!=GetPrivateProfileInt( "xacr","Dlg" ,1,ininame ));
*/
	g_bDlg = 1;	// fixed by uema2.
	g_bMake = ueutil::GetMakeDirectory();
	g_bOpen = ueutil::GetOpenDirectory();

// 僉乕儃乕僪擖椡撉傒偲傝
	GetAsyncKeyState(VK_SHIFT); // 側傫偐偙偺僟儈乕傪屇偽側偄偲帪乆曄乧
	bool shift_pushed = ( 0!=(GetAsyncKeyState(VK_SHIFT)>>15) );
	bool  ctrl_pushed = ( 0!=(GetAsyncKeyState(VK_CONTROL)>>15) );

// 僐儅儞僪儔僀儞張棟側偳

	// Shift偑墴偝傟偰偄偨傜暅尦儖乕僠儞慖戰夋柺偱慖偽偣傞
	CTool* def = NULL;
	if( shift_pushed && !ctrl_pushed )
	{
		def = (CTool*)DialogBox( hInst,
				MAKEINTRESOURCE(IDD_TYPE), NULL, TypeProc );
	}

//	if( __argc<=1 )
	if(0==lstrcmp(lpszCmdParam, L"")) //added by uema2.
	{
		// 堷悢偑柍偗傟偽丄愝掕夋柺
//		if( Configuration(g_DestDir) )
//			WritePrivateProfileString( "xacr","Dir",g_DestDir,ininame );
		ueutil::b_config = true;	//added by uema2.
		CCfgDlg cfg((struct HINSTANCE__ *)g_Inst);
		cfg.Start();
	}
	else
	{
		// 堷悢偑偁傟偽丄暅尦
		// argc偑側偄偺偱丄堦夞偩偗 by uema2.
		ueutil::b_config = false;
//		for( int i=1; i!=__argc; i++ )
//		{
//			if( GetFileAttributes( __argv[i] ) & FILE_ATTRIBUTE_DIRECTORY )
			if( GetFileAttributes( lpszCmdParam ) & FILE_ATTRIBUTE_DIRECTORY ){
				g_nError[ NOT_A_FILE ]++;
			}else{
				char pChar[MAX_PATH*2];
				// lpszCmdParam傪char偵曄姺 by uema2.
				DWORD charlength = _WideCharToMultiByte(CP_ACP, 0, lpszCmdParam,
										-1, NULL, 0, NULL, NULL);
				_WideCharToMultiByte(CP_ACP, 0, lpszCmdParam,
					-1, pChar, charlength, NULL, NULL);

//				ProcessFile( __argv[i], def, ctrl_pushed );
				ProcessFile( pChar, def, ctrl_pushed ); // by uema2.
			}
//		}

		// (傕偟偁傟偽)僄儔乕曬崘
		if( g_nError[0] | g_nError[1] | g_nError[2] )
		{
//			char errstr[1000];
			TCHAR errstr[1000]; //added by uema2.
//			sprintf( errstr, " NOT_A_FILE: %d times\n"
//							 "UNSUPPORTED: %d times\n"
//							 "     FAILED: %d times\n"
			wsprintf( errstr, L" NOT_A_FILE: %d times\n"
							 L"UNSUPPORTED: %d times\n"
							 L"     FAILED: %d times\n"
						   ,g_nError[NOT_A_FILE]
						   ,g_nError[UNSUPPORTED]
						   ,g_nError[FAILED] );
			MessageBox( NULL, errstr, NULL, MB_OK );
		}
	}

// 偟傘乣傝傚乣

//	CGPLTool::Free();
	delete g_pToolList;
	CTool::FreeWorkSpace();

	KctrlTerm();
    fdclose();
	return 0;
}

⌨️ 快捷键说明

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