📄 cfgextdlg.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 + -