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

📄 cfgextdlg.cpp

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

#include "CfgExtDlg.h"
#include "kiutil.h"
#include "ueutil.h"
#include "conv.h"

// 奼挘巕偺娭楢晅偗僟僀傾儘僌/////////////////////

void CCfgExtDlg::Start()
{
	DialogBox(hInst, MAKEINTRESOURCE(IDD_EXT),
		NULL, Proc);
}

BOOL CALLBACK CCfgExtDlg::Proc( HWND dlg, UINT msg, WPARAM wp, LPARAM lp )
{
	static int  i_lzh, i_zip, i_rar, i_tar, i_bz2, i_gz, i_z,
				i_arj, i_imp, i_b64, i_uue;
	int rc;

	switch(msg){
	case WM_INITDIALOG:

		// 娭楢晅偗偺忬懺傪挷傋傞
		// 娭楢晅偗偝傟偰偄傟偽1, 偝傟偰偄側偗傟偽0,
		// 懠偺僜僼僩偵娭楢晅偗偝傟偰偄傟偽2偑曉傞
		if(1 == GetArchiveFileType(L".zip", L"XacRettCE_ZIP"))
			SendMessage(GetDlgItem(dlg, IDC_ZIP), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".lzh", L"XacRettCE_LZH"))
			SendMessage(GetDlgItem(dlg, IDC_LZH), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".rar", L"XacRettCE_RAR"))
			SendMessage(GetDlgItem(dlg, IDC_RAR), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".tar", L"XacRettCE_TAR"))
			SendMessage(GetDlgItem(dlg, IDC_TAR), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".bz2", L"XacRettCE_BZ2"))
			SendMessage(GetDlgItem(dlg, IDC_BZ2), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".gz", L"XacRettCE_GZ"))
			SendMessage(GetDlgItem(dlg, IDC_GZ), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".z", L"XacRettCE_Z"))
			SendMessage(GetDlgItem(dlg, IDC_Z), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".arj", L"XacRettCE_ARJ"))
			SendMessage(GetDlgItem(dlg, IDC_ARJ), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".imp", L"XacRettCE_IMP"))
			SendMessage(GetDlgItem(dlg, IDC_IMP), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".b64", L"XacRettCE_B64"))
			SendMessage(GetDlgItem(dlg, IDC_B64), BM_SETCHECK, BST_CHECKED, 0);
		if(1 == GetArchiveFileType(L".uue", L"XacRettCE_UUE"))
			SendMessage(GetDlgItem(dlg, IDC_UUE), BM_SETCHECK, BST_CHECKED, 0);

		return TRUE;
	case WM_COMMAND:
		switch(wp){
		case IDOK:

			// 娭楢晅偗偺僠僃僢僋儃僢僋僗傪挷傋偰丄昁梫側傜奼挘巕傪捛壛
			i_lzh = GetExtCheck(dlg, IDC_LZH, L".lzh", L"XacRettCE_LZH");
			i_zip = GetExtCheck(dlg, IDC_ZIP, L".zip", L"XacRettCE_ZIP");
			i_rar = GetExtCheck(dlg, IDC_RAR, L".rar", L"XacRettCE_RAR");
			i_tar = GetExtCheck(dlg, IDC_TAR, L".tar", L"XacRettCE_TAR");
			i_bz2 = GetExtCheck(dlg, IDC_BZ2, L".bz2", L"XacRettCE_BZ2");
			i_gz  = GetExtCheck(dlg, IDC_GZ , L".gz" , L"XacRettCE_GZ");
			i_z   = GetExtCheck(dlg, IDC_Z , L".z" , L"XacRettCE_Z");
			i_arj = GetExtCheck(dlg, IDC_ARJ, L".arj", L"XacRettCE_ARJ");
			i_imp = GetExtCheck(dlg, IDC_IMP, L".imp", L"XacRettCE_IMP");
			i_b64 = GetExtCheck(dlg, IDC_B64, L".b64", L"XacRettCE_B64");
			i_uue = GetExtCheck(dlg, IDC_UUE, L".uue", L"XacRettCE_UUE");

			// 妋擣梡僟僀傾儘僌
			rc = MessageBox(dlg, L"Associate selected file type to XacRett?",
				L"XacRett", MB_YESNO);
			if(rc==IDYES){
				// 搊榐丒嶍彍張棟
				// b_lzh 偑0側傜嶍彍丄1側傜搊榐丄2偺応崌偼壗傕偟側偄
				TCHAR exename[MAX_PATH];
				int b_rc=0;
				GetModuleFileName( NULL, exename, MAX_PATH );

				//惉岟偡傟偽0偑曉傞 幐攕偡傟偽1偑曉傞
				if(i_lzh==1)	  b_rc = SetArchiveFileType(L".lzh", L"XacRettCE_LZH", L"LHA Archive", exename);
				else if(i_lzh==0) b_rc = DeleteArchiveFileType(L".lzh", L"XacRettCE_LZH");
				if(i_zip==1)      b_rc = SetArchiveFileType(L".zip", L"XacRettCE_ZIP", L"ZIP Archive", exename);
				else if(i_zip==0) b_rc = DeleteArchiveFileType(L".zip", L"XacRettCE_ZIP");
				if(i_rar==1)      b_rc = SetArchiveFileType(L".rar", L"XacRettCE_RAR", L"RAR Archive", exename);
				else if(i_rar==0) b_rc = DeleteArchiveFileType(L".rar", L"XacRettCE_RAR");
				if(i_tar==1)      b_rc = SetArchiveFileType(L".tar", L"XacRettCE_TAR", L"TAR Archive", exename);
				else if(i_tar==0) b_rc = DeleteArchiveFileType(L".tar", L"XacRettCE_TAR");
				if(i_bz2==1){
					b_rc = SetArchiveFileType(L".bz2", L"XacRettCE_BZ2", L"BZIP2 Archive", exename);
					b_rc = SetArchiveFileType(L".tbz", L"XacRettCE_TBZ", L"TAR+BZIP2 Archive", exename);
				}else if(i_bz2==0){
					b_rc = DeleteArchiveFileType(L".bz2", L"XacRettCE_BZ2");
					b_rc = DeleteArchiveFileType(L".tbz", L"XacRettCE_TBZ");
				}
				if(i_gz==1){
					b_rc = SetArchiveFileType(L".gz", L"XacRettCE_GZ", L"GZIP Archive", exename);
					b_rc = SetArchiveFileType(L".tgz", L"XacRettCE_TGZ", L"TAR+GZIP Archive", exename);
				}else if(i_gz==0){
					b_rc = DeleteArchiveFileType(L".gz", L"XacRettCE_GZ");
					b_rc = DeleteArchiveFileType(L".tgz", L"XacRettCE_TGZ");
				}
				if(i_z==1)      b_rc = SetArchiveFileType(L".z", L"XacRettCE_Z", L"Z Archive", exename);
				else if(i_z==0) b_rc = DeleteArchiveFileType(L".z", L"XacRettCE_Z");
				if(i_arj==1)      b_rc = SetArchiveFileType(L".arj", L"XacRettCE_ARJ", L"ARJ Archive", exename);
				else if(i_arj==0) b_rc = DeleteArchiveFileType(L".arj", L"XacRettCE_ARJ");
				if(i_imp==1)      b_rc = SetArchiveFileType(L".imp", L"XacRettCE_IMP", L"IMP Archive", exename);
				else if(i_imp==0) b_rc = DeleteArchiveFileType(L".imp", L"XacRettCE_IMP");
				if(i_b64==1)      b_rc = SetArchiveFileType(L".b64", L"XacRettCE_B64", L"B64 Archive", exename);
				else if(i_b64==0) b_rc = DeleteArchiveFileType(L".b64", L"XacRettCE_B64");
				if(i_uue==1){
					b_rc = SetArchiveFileType(L".uue", L"XacRettCE_UUE", L"UUencode Archive", exename);
					b_rc = SetArchiveFileType(L".xxe", L"XacRettCE_XXE", L"XXencode Archive", exename);
				}else if(i_uue==0){
					b_rc = DeleteArchiveFileType(L".uue", L"XacRettCE_UUE");
					b_rc = DeleteArchiveFileType(L".xxe", L"XacRettCE_XXE");
				}

				MessageBox(dlg, L"Associated", L"XacRett", MB_ICONINFORMATION);
			}//if(rc==IDYES)
			EndDialog(dlg, 1);
			return TRUE;
		case IDCANCEL:
			EndDialog(dlg, 0);
			return TRUE;
		}//switch(wp)
		return TRUE;
	}//switch(msg)
	return FALSE;
}

DWORD GetEnvVar( LPCTSTR ext, LPTSTR value, DWORD size )
{
	HKEY	hk ;
	LONG	lret ;
	LPBYTE	lpData ;
	DWORD	dwType, cbData ;

	/* 儗僕僗僩儕僉乕傪僆乕僾儞偡傞 */
	lret = RegOpenKeyEx( HKEY_CLASSES_ROOT,
						 ext,
						 0,
						 KEY_QUERY_VALUE,
						 &hk ) ;
	if ( lret != ERROR_SUCCESS ) {
		return FALSE ;
	}
	dwType = REG_SZ ;
	lpData = (LPBYTE) value ;
	cbData = size * sizeof (*value) ;
	lret = RegQueryValueEx( hk, L"Default", NULL, &dwType, lpData, &cbData ) ;
	RegCloseKey( hk ) ;
	if ( lret != ERROR_SUCCESS ) {
		return 0 ;
	} else if ( lret == ERROR_MORE_DATA ) {
		return cbData / sizeof (*value) ;
	}
	return (cbData / sizeof (*value)) - 1 ;
}

int CCfgExtDlg::GetArchiveFileType(LPCTSTR ext, LPCTSTR docname)
{
	TCHAR lpValue[128];

	// 娭楢晅偗偑峴傢傟偰偄側偄応崌偼0偑曉傞
	if(FALSE == GetEnvVar(ext, lpValue, 128)) return 0;
	// 惓偟偔娭楢晅偗偑峴傢傟偰偄傟偽1偑曉傞
	if(0==lstrcmp(lpValue, docname)) return 1;
	// 娭楢晅偗偑峴傢傟偰偄偰丄偐偮XacRett埲奜偺応崌偼2偑曉傞
	else return 2;
}

int CCfgExtDlg::SetArchiveFileType(LPCTSTR ext, LPCTSTR docname, LPCTSTR doctype, LPCTSTR exepath)
{
	HKEY	hk ;
	LONG	lret;
	DWORD	ret;
	TCHAR lpTemp[512];

	// .??? 偵 XacRettCE_??? 傪搊榐
	lret = RegCreateKeyEx(HKEY_CLASSES_ROOT, ext, 0, NULL, 0, 0, NULL, &hk, &ret);
	if ( lret != ERROR_SUCCESS ) return 1;
	RegSetValueEx(hk, L"Default", 0, REG_SZ, (LPBYTE)docname, 
		(lstrlen(docname)+1)*sizeof(TCHAR));
	RegCloseKey( hk ) ;
	// XacRettCE_??? 偵 ??? Archive 傪搊榐
	lret = RegCreateKeyEx(HKEY_CLASSES_ROOT, docname, 0, NULL, 0, 0, NULL, &hk, &ret);
	if ( lret != ERROR_SUCCESS ) return 1;
	RegSetValueEx(hk, L"Default", 0, REG_SZ, (LPBYTE)doctype, 
		(lstrlen(doctype)+1)*sizeof(TCHAR));
	RegCloseKey( hk ) ;
	// XacRettCE_???\DefaultIcon 偵
	// 幚峴僼傽僀儖偺埵抲偲ID [\XacRett11.exe, 1] 傪搊榐
	wsprintf(lpTemp, L"%s\\DefaultIcon", docname);
	lret = RegCreateKeyEx(HKEY_CLASSES_ROOT, lpTemp, 0, NULL, 0, 0, NULL, &hk, &ret);
	if ( lret != ERROR_SUCCESS ) return 1;
	wsprintf(lpTemp, L"%s, -0", exepath);
	RegSetValueEx(hk, L"Default", 0, REG_SZ, 
		(LPBYTE)lpTemp, (lstrlen(lpTemp)+1)*sizeof(TCHAR));
	RegCloseKey( hk ) ;
	// XacRettCE_???\Shell\Open\Command 偵
	// 幚峴宍幃 ["\XacRett11.exe %1"] 傪搊榐
	wsprintf(lpTemp, L"%s\\Shell\\Open\\Command", docname);
	lret = RegCreateKeyEx(HKEY_CLASSES_ROOT, lpTemp, 0, NULL, 0, 0, NULL, &hk, &ret);
	if ( lret != ERROR_SUCCESS ) return 1;
	wsprintf(lpTemp, L"\"%s\"", exepath);
	lstrcat(lpTemp, L" %1");
	RegSetValueEx(hk, L"Default", 0, REG_SZ, 
		(LPBYTE)lpTemp, (lstrlen(lpTemp)+1)*sizeof(TCHAR));
	RegCloseKey( hk ) ;
	// 奼挘巕偺搊榐偵惉岟偟偨傜0傪曉偡
	return 0;
	//SHChangeNotify偑側偄偐傜丄嵞婲摦偟側偄偲偩傔丠
}

int CCfgExtDlg::DeleteArchiveFileType(LPCTSTR ext, LPCTSTR docname)
{
	HKEY	hk ;
	LONG	lret ;
	// XacRettCE_???傪徚嫀
	lret = RegOpenKeyEx(HKEY_CLASSES_ROOT, L"", 0, 0, &hk);
	if ( lret != ERROR_SUCCESS ) return 1; //return FALSE;
	RegDeleteKey(hk, docname);
	RegCloseKey( hk ) ;
	// .??? 撪偺 XacRettCE_??? 偺抣傪徚嫀
	lret = RegOpenKeyEx(HKEY_CLASSES_ROOT, ext, 0, 0, &hk);
	if ( lret != ERROR_SUCCESS ) return 1; //return FALSE;
	RegDeleteValue(hk, L"Default");
	RegCloseKey( hk ) ;

	return 0;
}

int CCfgExtDlg::GetExtCheck(HWND dlg, int nID, LPCTSTR ext, LPCTSTR docname)
{
	int rc, type;

	type = GetArchiveFileType(ext, docname);
	rc = SendMessage(GetDlgItem(dlg, nID), BM_GETCHECK, 0, 0);
	if(rc==BST_CHECKED) return 1; 
	else if(rc==BST_UNCHECKED && type!=2) return 0;
	else return 2;
}

⌨️ 快捷键说明

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