📄 pluginmgr.cpp
字号:
#include "stdafx.h"
#include "PluginMgr.h"
CPluginSet::CPluginSet()
{
m_bDirty=FALSE;
InitializeCriticalSection(&m_cs);
}
CPluginSet::~CPluginSet()
{
DeleteCriticalSection(&m_cs);
}
BOOL CPluginSet::Init()
{
COMINFO ci;
CMarkup xml;
//加载名称映射
if (xml.LoadFromRes(g_hInstance,MAKEINTRESOURCE(IDR_XML1),_T("XML")))
{
m_pluginlist.clear();
xml.ResetMainPos();
xml.FindElem(_T("component"));
xml.IntoElem();
xml.ResetMainPos();
for (;;)
{
if (!xml.FindElem()) break;
ci.strname=xml.GetAttrib(_T("name"));
// DbgPrintW(L"添加,插件名称:%s",ci.strname.c_str());
ci.strfriendlyname=xml.GetAttrib(_T("friendlyname"));
// DbgPrintW(L"添加,插件名称2:%s",ci.strfriendlyname.c_str());
ci.strdescription=xml.GetAttrib(_T("description"));
// DbgPrintW(L"添加,插件描述:%s",ci.strdescription.c_str());
ci.strwarning=xml.GetAttrib(_T("warningondisabled"));
// DbgPrintW(L"添加,插件警告:%s",ci.strwarning.c_str());
ci.bDisable=FALSE;
m_pluginlist.push_back(ci);
}
}
QQinterface::StartPluginHook(static_cast<IPluginSetCallback*>(this));
return TRUE;
}
void CPluginSet::Delete()
{
QQinterface::StopPluginHook();
}
// IPluginSetCallback 接口
BOOL CPluginSet::OnEnablePlugIn(LPCWSTR lpszPluginName)
{
return OnEnableDisablePlugin(lpszPluginName);
}
BOOL CPluginSet::OnDisablePlugIn(LPCWSTR lpszPluginName)
{
return OnEnableDisablePlugin(lpszPluginName);
}
BOOL CPluginSet::OnEnableDisablePlugin(LPCWSTR lpszPluginName)
{
BOOL bResult=TRUE;//修正:对于未知插件总应该返回TRUE
AquireDataLock();
for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
{
if (lstrcmpi(lpszPluginName,it->strname.c_str())==0)
{
if (it->bDisable)
{
// DbgPrintW(L"禁用,插件名称:%s",lpszPluginName);
bResult=QQinterface::DisablePlugIn(lpszPluginName);
}
else
{
// DbgPrintW(L"启用,插件名称:%s",lpszPluginName);
bResult=QQinterface::EnablePlugIn(lpszPluginName);
}
break;
}
}
ReleaseDataLock();
return bResult;
}
// 用于数据管理
void CPluginSet::AquireDataLock(void)
{
EnterCriticalSection(&m_cs);
}
void CPluginSet::ReleaseDataLock(void)
{
LeaveCriticalSection(&m_cs);
}
//下面这些操作都不带锁,所以操作前需要先获取锁
DWORD CPluginSet::GetPluginCount(void)
{
return m_pluginlist.size();
}
DWORD CPluginSet::GetPlugInEnabledCount(void)
{
DWORD dwenable=0;
for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
{
if (!it->bDisable) dwenable++;
}
return dwenable;
}
const COMINFO& CPluginSet::GetPlugin(DWORD dwIndex)
{
if (dwIndex>=m_pluginlist.size()) dwIndex=0;
return m_pluginlist[dwIndex];
}
BOOL CPluginSet::UpdatePluginStatus(DWORD dwIndex,BOOL bDisable)
{
m_bDirty=TRUE;
if (dwIndex>=m_pluginlist.size()) dwIndex=0;
m_pluginlist[dwIndex].bDisable=bDisable;
return TRUE;
}
BOOL CPluginSet::LoadPersonalData(LPCTSTR szDataFile)
{
CMarkup xml;
std_str stmp;
m_DataFile=szDataFile;
if (xml.Load(szDataFile))
{
xml.ResetMainPos();
xml.FindElem(_T("component"));
xml.IntoElem();
xml.ResetMainPos();
for (;;)
{
if (!xml.FindElem()) break;
stmp=xml.GetAttrib(_T("name"));
// DbgPrintW(L"添加,插件名称:%s",stmp.c_str());
for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
{
if (lstrcmpi(stmp.c_str(),it->strname.c_str())==0)
{
stmp=xml.GetAttrib(_T("disable"));
it->bDisable=_ttoi(stmp.c_str())?1:0;
break;
}
}
}
return TRUE;
}
return FALSE;
}
BOOL CPluginSet::SavePersonalData(BOOL bFource)
{
if (!bFource && !m_bDirty) return TRUE;
if (m_DataFile.empty()) return FALSE;
m_bDirty=FALSE;
CMarkup xml;
xml.SetDoc(_T("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"));
xml.ResetMainPos();
xml.AddElem(_T("component"));
xml.IntoElem();
for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
{
xml.AddElem(_T("plugin"));
xml.AddAttrib(_T("name"),it->strname);
xml.AddAttrib(_T("disable"),it->bDisable?1:0);
}
return xml.Save(m_DataFile);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -