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

📄 externalutils.cpp

📁 用VC写的浏览器
💻 CPP
字号:
// ExternalUtils.cpp : implementation file
//

#include "stdafx.h"
#include "GreenBrowser.h"
#include "ExternalUtils.h"
#include "MainFrm.h"
//#include "InputUtil.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#pragma optimize( "s", on)

/////////////////////////////////////////////////////////////////////////////
// CExternalUtils dialog


CExternalUtils::CExternalUtils(CWnd* pParent /*=NULL*/)
	: CDialog(CExternalUtils::IDD, pParent)
{
	//{{AFX_DATA_INIT(CExternalUtils)
	//}}AFX_DATA_INIT
}


void CExternalUtils::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CExternalUtils)
	DDX_Control(pDX, IDC_PATH, m_cPath);
	DDX_Control(pDX, IDC_PARAM, m_cPara);
	DDX_Control(pDX, IDC_AUTO_RUN, m_cRun);
	DDX_Control(pDX, IDC_STARTUP, m_cStartup);
	DDX_Control(pDX, IDC_CLOSEUTIL, m_cClose);
	DDX_Control(pDX, IDC_NAME, m_cName);
	DDX_Control(pDX, IDC_COMMAND, m_cCommand);
	DDX_Control(pDX, IDC_EXTERN_UTIL, m_UtilList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CExternalUtils, CDialog)
	//{{AFX_MSG_MAP(CExternalUtils)
	ON_BN_CLICKED(IDC_ADD_UTIL, OnAddUtil)
	ON_BN_CLICKED(IDC_MOD_UTIL, OnModUtil)
	ON_BN_CLICKED(IDC_DEL_UTIL, OnDelUtil)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, OnDeltaposSpin1)
	ON_NOTIFY(LVN_ENDLABELEDIT, IDC_EXTERN_UTIL, OnEndlabeleditExternUtil)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_EXTERN_UTIL, OnItemchangedExternUtil)
	ON_NOTIFY(NM_DBLCLK, IDC_EXTERN_UTIL, OnDblclkExternUtil)
	ON_BN_CLICKED(IDC_BROWSER_FILE, OnBrowserFile)
	ON_BN_CLICKED(IDC_IMPORT_PLUG_IN, OnImportPlugIn)
	ON_BN_CLICKED(IDC_BROWSER_PATH, OnBrowserPath)
	ON_BN_CLICKED(IDC_CLEAN, OnClean)
	ON_BN_CLICKED(IDC_AUTO_RUN, OnAutoRun)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CExternalUtils message handlers

BOOL CExternalUtils::OnInitDialog() 
{
#ifdef _WRITE_LNG_FILE_
	_WriteDlgString(this,"DialogExternal");
	this->OnCancel();
	return TRUE;
#endif
	LOADDLG("DialogExternal");
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_UtilList.SetExtendedStyle(m_UtilList.GetExtendedStyle()| LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);

	int i=0;
	CRect rect;
	CString str;
	LOADSTR(str ,IDS_NAME);
	m_UtilList.InsertColumn(0,str);
	m_UtilList.GetWindowRect(rect);
	m_UtilList.SetColumnWidth(0, 150);
	LOADSTR(str ,IDS_COMMAND);
	m_UtilList.InsertColumn(1,str);
	m_UtilList.SetColumnWidth(1, rect.Width()-180);

	m_ExternalList.Clone(&pmf->m_ExternalUtilList);

	m_bSkip = TRUE;
	CExternalUtilItem* item;
	for (i=0;i <= m_ExternalList.m_UtilList.GetUpperBound();i++)
	{
		item = m_ExternalList.m_UtilList.GetAt(i);
		m_UtilList.InsertItem(i, item->m_strUtilName);
		m_UtilList.SetItemText(i, 1, item->m_strUtilCmd);
		m_UtilList.SetCheck(i,item->m_bUtilRun);
	}

	m_bSkip = FALSE;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CExternalUtils::OnOK() 
{
	// TODO: Add extra validation here
	OnModUtil();
	//
	int n = m_UtilList.GetItemCount();
	CExternalUtilItem* item;
	for( int i=0; i<n; i++)
	{
		item = m_ExternalList.m_UtilList.GetAt(i);
		item->m_bUtilRun = m_UtilList.GetCheck(i);
	}
	//
	pmf->m_ExternalUtilList.Clone(&m_ExternalList);
	
	CDialog::OnOK();
}

void CExternalUtils::OnAddUtil() 
{
	// TODO: Add your control notification handler code here
	CString Name;
	m_cName.GetWindowText(Name);
	CString Command;
	m_cCommand.GetWindowText(Command);

	CString Para;
	m_cPara.GetWindowText(Para);
	CString Path;
	m_cPath.GetWindowText(Path);

	if(!Command.IsEmpty() || Name.Left(2)=="--")
	{
		if(Name.IsEmpty())
			Name = Command;

		m_bSkip = TRUE;

		int i = m_UtilList.GetItemCount();//!!must do like this
		i = m_UtilList.InsertItem(i, Name);
		m_UtilList.SetItemText(i, 1, Command);
		m_UtilList.SetCheck(i,m_cRun.GetCheck());
		LIST_FOCUS_POS (m_UtilList, i);

		CExternalUtilItem* eui = new CExternalUtilItem;
		eui->m_strUtilName = Name;
		eui->m_strUtilCmd = Command;
		eui->m_strUtilPara = Para;
		eui->m_strUtilPath = Path;

		eui->m_bUtilStart = m_cStartup.GetCheck();
		eui->m_bUtilClose = m_cClose.GetCheck();
		eui->m_bUtilRun = m_cRun.GetCheck();
		eui->m_iProcess = 0;
		m_ExternalList.m_UtilList.Add(eui);
		m_bSkip = FALSE;

		OnClean();
	}
}

void CExternalUtils::OnModUtil() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_UtilList.GetFirstSelectedItemPosition();
	int nItem;
	if(pos!=NULL)
	{
		nItem = m_UtilList.GetNextSelectedItem(pos);
		m_bSkip = TRUE;
		CString Name;
		m_cName.GetWindowText(Name);
		CString Command;
		m_cCommand.GetWindowText(Command);
		//
		CString Para;
		m_cPara.GetWindowText(Para);
		CString Path;
		m_cPath.GetWindowText(Path);
		//
		if(!Command.IsEmpty() || Name.Left(2)=="--")
		{
			if(Name.IsEmpty())
				Name = Command;
	
			m_UtilList.SetItemText(nItem, 0, Name);
			m_UtilList.SetItemText(nItem, 1, Command);
			m_UtilList.SetCheck(nItem,m_cRun.GetCheck());

			CExternalUtilItem* eui = m_ExternalList.m_UtilList.GetAt(nItem);
			eui->m_strUtilName = Name;
			eui->m_strUtilCmd = Command;
			eui->m_strUtilPara = Para;
			eui->m_strUtilPath = Path;
			//
			eui->m_bUtilStart = m_cStartup.GetCheck();
			eui->m_bUtilClose = m_cClose.GetCheck();
			eui->m_bUtilRun = m_cRun.GetCheck();
		}
		m_bSkip = FALSE;
	}
	else
		return;
	
}

void CExternalUtils::OnDelUtil() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_UtilList.GetFirstSelectedItemPosition();
	int nItem;
	if(pos!=NULL)
	{
		nItem = m_UtilList.GetNextSelectedItem(pos);
		m_UtilList.DeleteItem(nItem);
		delete m_ExternalList.m_UtilList.GetAt(nItem);
		m_ExternalList.m_UtilList.RemoveAt(nItem);
		//
		LIST_FOCUS_POS(m_UtilList, nItem);
	}
	else
		return;
}

void CExternalUtils::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	POSITION pos = m_UtilList.GetFirstSelectedItemPosition();
	int nItem = -1, newItem;
	if(pos!=NULL)
	{
		nItem = m_UtilList.GetNextSelectedItem(pos);
		if(pNMUpDown->iDelta<0)
			newItem = nItem -1;
		else
			newItem = nItem + 1;
		int n = m_UtilList.GetItemCount();
		if(newItem>=0 && newItem<n)
		{
			CString str = m_UtilList.GetItemText(nItem,0);
			CString str1 = m_UtilList.GetItemText(nItem,1);
			BOOL bTemp = m_UtilList.GetCheck(nItem);
			m_UtilList.DeleteItem(nItem);

			m_UtilList.InsertItem(newItem, str);
			m_UtilList.SetItemText(newItem, 1, str1);
			m_UtilList.SetCheck(newItem, bTemp);
			//
			LIST_FOCUS_POS(m_UtilList,newItem);

			CExternalUtilItem* eui = m_ExternalList.m_UtilList.GetAt(nItem);
			m_ExternalList.m_UtilList.SetAt(nItem, m_ExternalList.m_UtilList.GetAt(newItem));
			m_ExternalList.m_UtilList.SetAt(newItem, eui);
		}
	}	
	*pResult = 0;
}

void CExternalUtils::OnEndlabeleditExternUtil(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here
	CString str;
	m_UtilList.GetEditControl()->GetWindowText(str);
	str.TrimLeft();
	str.TrimRight();
	m_UtilList.SetItemText(pDispInfo->item.iItem,0,str);
	
	m_ExternalList.m_UtilList.GetAt(pDispInfo->item.iItem)->m_strUtilName = str;

	*pResult = 0;
}

void CExternalUtils::OnItemchangedExternUtil(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	if(!m_bSkip)
	{
		m_bSkip = FALSE;

		int i, nIndex = pNMListView->iItem;
		POSITION pos = m_UtilList.GetFirstSelectedItemPosition();
		if(pos!=NULL)
		{
			i = m_UtilList.GetNextSelectedItem(pos);
		}
		if(nIndex==i)
		{
			m_cName.SetWindowText(m_UtilList.GetItemText(nIndex,0));
			m_cCommand.SetWindowText(m_UtilList.GetItemText(nIndex,1));
			m_cPara.SetWindowText(m_ExternalList.m_UtilList.GetAt(pNMListView->iItem)->m_strUtilPara);
			m_cPath.SetWindowText(m_ExternalList.m_UtilList.GetAt(pNMListView->iItem)->m_strUtilPath);
			//
			m_cStartup.SetCheck(m_ExternalList.m_UtilList.GetAt(pNMListView->iItem)->m_bUtilStart);
			m_cClose.SetCheck(m_ExternalList.m_UtilList.GetAt(pNMListView->iItem)->m_bUtilClose);
			//
			m_cRun.SetCheck(m_UtilList.GetCheck(nIndex));
		}
		else
		{
			OnClean();
		}
	}

	*pResult = 0;
}

void CExternalUtils::InsertApp(CString strPath)
{
	try{

	if (_GetPlugInType(strPath))
	{
		CString strName = _GetPlugInName(strPath);
		m_cName.SetWindowText(strName);
	}
	else
	{
		int pos1 = strPath.ReverseFind('\\');
		int pos2 = strPath.ReverseFind('.');
		int count = pos2-pos1-1;
		if (count>0)
		{
			CString strName = strPath.Mid(pos1+1, count);
			m_cName.SetWindowText(strName);
		}
	}
	//
	strPath = "\""+strPath;
	strPath += "\"";
	m_cCommand.SetWindowText(strPath);

	}catch(...){}
}

void CExternalUtils::OnBrowserFile() 
{
	// TODO: Add your control notification handler code here
	CString str;
	LOADSTR(str ,IDS_TYPE_EXTOOL);
	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, str,this);
	if(dlg.DoModal()==IDOK)
	{
		CString str = dlg.GetPathName();
		if (str.GetLength())
			InsertApp(str);
	}
}

//#pragma optimize( "s", off)

void CExternalUtils::OnImportPlugIn() 
{
	// TODO: Add your control notification handler code here
	CString strPath;
	if (_BrowserPath(this,strPath) == FALSE)
		return;
	if(strPath.Right(1) != "\\")
		strPath += "\\";

	CString strRootPath = strPath;

	try{

	static char cur[MAX_PATH];
	cur[0]=0;
	GetCurrentDirectory(MAX_PATH, cur);
	if(!SetCurrentDirectory(strPath))
		CreateDirectory(strPath, NULL);
	else
		SetCurrentDirectory(cur);

	WIN32_FIND_DATA wfd;
	HANDLE          h;
	strPath += "*.*";

	CString strIniPath;
	int i=0;
	h = FindFirstFile(strPath, &wfd);
	if(h != INVALID_HANDLE_VALUE)
	{
		do
		{
			if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
			{
				if(lstrcmp(wfd.cFileName, _T(".")) == 0 || lstrcmp(wfd.cFileName, _T("..")) == 0 || lstrcmpi(wfd.cFileName, _T("default")) == 0)
					continue;
				strIniPath = strRootPath + wfd.cFileName + "\\plugin.ini";
				if (_FileIsExist(strIniPath) && _GetPlugInType(strIniPath))
				{
					InsertApp(strIniPath);
					OnAddUtil();
					i++;
				}
			}
		}
		while(FindNextFile(h, &wfd) && i<250);
	}
	FindClose(h);

	}catch(...){}	
}

void CExternalUtils::OnBrowserPath() 
{
	// TODO: Add your control notification handler code here
	CString strPath;
	if (_BrowserPath(this,strPath) == FALSE)
		return;
	if(strPath.Right(1) != "\\")
		strPath += "\\";

	m_cPath.SetWindowText(strPath);
}

void CExternalUtils::OnClean()
{
	// TODO: Add your control notification handler code here
	m_cName.SetWindowText("");
	m_cCommand.SetWindowText("");
	m_cPara.SetWindowText("");
	m_cPath.SetWindowText("");
	m_cStartup.SetCheck(FALSE);
	m_cClose.SetCheck(FALSE);
	m_cRun.SetCheck(FALSE);
}

void CExternalUtils::OnAutoRun() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_UtilList.GetFirstSelectedItemPosition();
	if(pos==NULL)
		return;
	int nItem;
	nItem = m_UtilList.GetNextSelectedItem(pos);
	m_UtilList.SetCheck(nItem, !m_UtilList.GetCheck(nItem));
}

void CExternalUtils::OnDblclkExternUtil(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_UtilList.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem = m_UtilList.GetNextSelectedItem(pos);
		CString strCmd = m_UtilList.GetItemText(nItem,1);
		strCmd.Remove('"');
		strCmd = _StringGetUpUrl(strCmd);
		pmf->NewChildWindow(1,2,strCmd);
	}
	//
	*pResult = 0;
}

⌨️ 快捷键说明

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