应用程序类对象实例初始操作的分析(2)
4.EnableShellOpen();
为在Windows中使用外壳操作打开文件作准备
void CWinApp::EnableShellOpen()
{
ASSERT(m_atomApp == NULL && m_atomSystemTopic == NULL); // do once
m_atomApp = ::GlobalAddAtom(m_pszExeName);
m_atomSystemTopic = ::GlobalAddAtom(_T("system"));
}
5.RegisterShellFileTypes
向系统注册文件类型,以使用外壳操作。
将调用m_pDocManager->RegisterShellFileTypes()
(CDocManager::RegisterShellFileTypes()源码附后)
要点:将所有文档模板的类型,外壳命令等写入注册表
包括type ID、shellopenddeexec = [open("%1")]、shellprintddeexec = [print("%1")]、shellprinttoddeexec = [printto("%1","%2","%3","%4")]等等。
6.ProcessShellCommand
处理命令行、外壳命令等
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
①先建立CCommandLineInfo对象
②再将命令行参数等分解到cmdInfo;
void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo)
{
for (int i = 1; i < __argc; i++)
{
LPCTSTR pszParam = __targv[i];
BOOL bFlag = FALSE;
BOOL bLast = ((i + 1) == __argc);
if (pszParam[0] == '-' || pszParam[0] == '/')
{
// remove flag specifier
bFlag = TRUE;
++pszParam;
}
rCmdInfo.ParseParam(pszParam, bFlag, bLast);
}
}
通过该操作,命令行被转化为cmdInfo;
命令行的意义
app (新建文件)
app filename(打开文件)
app /p filename(打印文件)
app /pt filename printer driver port (用指定的打印机打印)
app /dde (运行并接收DDE命令)
app /Automation (启动为自动化服务器)
app /Embedding (内嵌式运行)
ParseCommandLine后,操作类型(打开、新建、打印..)存放在m_nShellCommand; 文件名存放在m_strFileName......
- 上一篇:基于ICMP的木马的编写!!!!!!
- 下一篇:VC学习:虚拟按键的总结及示例