快速业务通道

Shell扩展:定制上下文菜单

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
_SUCCESS,  FACILITY_NULL, (USHORT)(ID_COPY_PATH + 1)));
}

InvokeCommand方法:用来处理菜单项的命令:

HRESULT 

STDMETHODCALLTYPE InvokeCommand( LPCMINVOKECOMMANDINFO lpici )
{
    //Ctrl键按下时拷贝的路径的"\"用"\\"代替,这样可

以直接应用在代码中
    BOOL  bCtrlPress = ( ( ::GetKeyState( VK_CONTROL ) & 0x8000 ) 

!= 0 );
    if( LOWORD( lpici->lpVerb ) == ID_COPY_PATH )
    {    //如果是拷贝文件路径菜单项
        CString  strClipboard(_T(""));
        for ( int nIndex = 0; nIndex <  (int)

m_arrFilePath.GetCount(); nIndex++ )
        {    //遍历选中的文件(夹)列表
            CString  strItem = m_arrFilePath.GetAt( nIndex );
            if( bCtrlPress )
            {
                //获取路径的代码格式
                strItem.Replace( _T("\\"), _T

("\\\\") );
            }
            //添加到总串并以换行结束
            strClipboard.Append( strItem );
            strClipboard.Append( _T("\r\n") );
        }
        //拷贝进剪贴板
        if( ::OpenClipboard( NULL ) )
        {
            ::EmptyClipboard();
            HGLOBAL hGlobal = GlobalAlloc( GPTR, ( 

strClipboard.GetLength() + 1 ) * sizeof( TCHAR ) );
            LPTSTR lpszText = (LPTSTR)::GlobalLock( hGlobal );
            if( lpszText != NULL )
            {
                _tcscpy_s( lpszText, strClipboard.GetLength() + 1, 

strClipboard );
            }
            ::SetClipboardData( CF_TEXT_FORMAT, hGlobal);
            ::GlobalUnlock( hGlobal );
            ::CloseClipboard();
        }
    }
    return S_OK;
}

GetCommandString方法:在此处用不到,简单地返回E_NOTIMPL即可.

程 序实现已完结,最后一步就是注册,需要在注册表的 HKEY_CLASSES_ROOT\*\ShellEx\ContextMenuHandlers\键一自己的键,并把键值 设为刚刚编写的COM的CLSID.

由于是用ATL实现,我只需在RGS文件的HKCR键下加上如下脚 本:

    NoRemove *
    {
        NoRemove ShellEx
        {
            NoRemove ContextMenuHandlers
            {
                ForceRemove ''GetFilePath''=s  ''{AAD8C1A8-017E-44B3-8271-DFBA4CD8E75C}''
            }
        }
    }

AAD8C1A8-017E-44B3-8271-DFBA4CD8E75C是我的 CLSID.

一切都已完成。希望大家愉快.

PS: 我不知道博客园能不 能上传附件,如果有需要源码的朋友可以留下Email。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号