首页 > 编程语言 > 详细

IShellLink接口的MFC封装类

时间:2021-08-04 19:20:33      阅读:25      评论:0      收藏:0      [点我收藏+]
技术分享图片//Class?which?contains?all?the?parameters?related?to?shortcut
技术分享图片class?CShellLinkInfo?:?public?CObject
技术分享图片技术分享图片技术分享图片{
技术分享图片public:
技术分享图片//Constructors?/?Destructors
技术分享图片??CShellLinkInfo();
技术分享图片??CShellLinkInfo(const?CShellLinkInfo&?sli);
技术分享图片??~CShellLinkInfo();
技术分享图片
技术分享图片//Methods?
技术分享图片??CShellLinkInfo&?operator=(const?CShellLinkInfo&?sli);
技术分享图片
技术分享图片//Diagnostic?support
技术分享图片#ifdef?_DEBUG
技术分享图片??virtual?void?Dump(CDumpContext&?dc);
技术分享图片#endif
技术分享图片
技术分享图片//Variables
技术分享图片??CString??????m_sTarget;
技术分享图片??LPITEMIDLIST?m_pidl;
技术分享图片??CString??????m_sArguments;
技术分享图片??CString??????m_sDescription;
技术分享图片??WORD?????????m_wHotkey;
技术分享图片??CString??????m_sIconLocation;
技术分享图片??int??????????m_nIconIndex;
技术分享图片??int??????????m_nShowCmd;
技术分享图片??CString??????m_sWorkingDirectory;
技术分享图片};
技术分享图片
技术分享图片
技术分享图片//Class?which?wraps?standard?shortcuts?i.e.?IShellLink
技术分享图片class?CShellLink
技术分享图片技术分享图片技术分享图片{
技术分享图片public:
技术分享图片//Constructors?/?Destructors
技术分享图片??CShellLink();
技术分享图片??virtual?~CShellLink();
技术分享图片
技术分享图片//Methods
技术分享图片??BOOL?Create(const?CShellLinkInfo&?sli);
技术分享图片??BOOL?Load(const?CString&?sFilename);
技术分享图片??BOOL?Save(const?CString&?sFilename);
技术分享图片??BOOL?Resolve(CWnd*?pParentWnd,?DWORD?dwFlags);
技术分享图片
技术分享图片//Accessors
技术分享图片??CString??????GetPath()?const;
技术分享图片??LPITEMIDLIST?GetPathIDList()?const;
技术分享图片??CString??????GetArguments()?const;
技术分享图片??CString??????GetDescription()?const;
技术分享图片??WORD?????????GetHotKey()?const;
技术分享图片??CString??????GetIconLocation()?const;
技术分享图片??int??????????GetIconLocationIndex()?const;
技术分享图片??int??????????GetShowCommand()?const;
技术分享图片??CString??????GetWorkingDirectory()?const;
技术分享图片
技术分享图片//Mutators
技术分享图片??void?SetPath(const?CString&?sPath);
技术分享图片??void?SetPathIDList(LPITEMIDLIST?pidl);
技术分享图片??void?SetArguments(const?CString&?sArguments);
技术分享图片??void?SetDescription(const?CString&?sDescription);
技术分享图片??void?SetHotKey(WORD?wHotkey);
技术分享图片??void?SetIconLocation(const?CString&?sIconLocation);
技术分享图片??void?SetIconLocationIndex(int?nIconIndex);
技术分享图片??void?SetShowCommand(int?nShowCmd);
技术分享图片??void?SetWorkingDirectory(const?CString&?sWorkingDirectory);
技术分享图片
技术分享图片protected:
技术分享图片??BOOL?Initialise();
技术分享图片??CShellLinkInfo?m_sli;
技术分享图片??IShellLink*????m_psl;
技术分享图片??IPersistFile*??m_ppf;
技术分享图片??BOOL???????????m_bAttemptedInitialise;
技术分享图片};
技术分享图片
技术分享图片
技术分享图片//Class?which?wraps?internet?shortcuts?i.e.?IUniformResourceLocator
技术分享图片class?CUrlShellLink?:?public?CShellLink
技术分享图片技术分享图片技术分享图片{
技术分享图片public:
技术分享图片//Constructors?/?Destructors
技术分享图片??CUrlShellLink();
技术分享图片??virtual?~CUrlShellLink();
技术分享图片
技术分享图片//Methods
技术分享图片??BOOL?Create(const?CShellLinkInfo&?sli);
技术分享图片??BOOL?Load(const?CString&?sFilename);
技术分享图片??BOOL?Save(const?CString&?sFilename);
技术分享图片??BOOL?Invoke(CWnd*?pParentWnd,?DWORD?dwFlags,?const?CString&?sVerb);
技术分享图片
技术分享图片//Following?4?functions?just?ASSERT?if?called
技术分享图片??CString?GetArguments()?const;
技术分享图片??LPITEMIDLIST?GetPathIDList()?const;
技术分享图片??void?SetArguments(const?CString&?sArguments);
技术分享图片??void?SetPathIDList(LPITEMIDLIST?pidl);
技术分享图片
技术分享图片protected:
技术分享图片??BOOL?Initialise();
技术分享图片??IUniformResourceLocator*?m_pURL;
技术分享图片};
技术分享图片

?

技术分享图片技术分享图片实现文件
技术分享图片
技术分享图片
技术分享图片技术分享图片/**/////////////////?Includes?////////////////////////////////////////////
技术分享图片
技术分享图片#include?"stdafx.h"
技术分享图片#include?"ShellLink.h"
技术分享图片
技术分享图片技术分享图片/**/////////////////?Implementation?//////////////////////////////////////
技术分享图片
技术分享图片CShellLinkInfo::CShellLinkInfo()
技术分享图片技术分享图片技术分享图片{
技术分享图片??//Set?up?some?reasonable?defaults
技术分享图片??m_pidl?=?NULL;
技术分享图片??m_wHotkey?=?0;
技术分享图片??m_nIconIndex?=?0;
技术分享图片??m_nShowCmd?=?SW_SHOW;
技术分享图片}
技术分享图片
技术分享图片CShellLinkInfo::CShellLinkInfo(const?CShellLinkInfo&?sli)
技术分享图片技术分享图片技术分享图片{
技术分享图片??*this?=?sli;
技术分享图片}
技术分享图片
技术分享图片CShellLinkInfo::~CShellLinkInfo()
技术分享图片技术分享图片技术分享图片{
技术分享图片??//?Get?the?shell‘s?allocator.?
技术分享图片??IMalloc*?pMalloc;
技术分享图片??HRESULT?hRes?=?SHGetMalloc(&pMalloc);
技术分享图片??if?(!SUCCEEDED(hRes))?
技术分享图片技术分享图片??技术分享图片{
技术分享图片????TRACE(_T("CShellLinkInfo::~CShellLinkInfo,?Failed?to?get?the?shell‘s?IMalloc?interface,?HRESULT?was?%x\n"),?hRes);
技术分享图片????return;
技术分享图片??}
技术分享图片
技术分享图片??//Free?the?pidl
技术分享图片??if?(m_pidl)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????pMalloc->Free(m_pidl);
技术分享图片????m_pidl?=?NULL;
技术分享图片??}
技术分享图片
技术分享图片??//?Release?the?pointer?to?IMalloc
技术分享图片??pMalloc->Release();?
技术分享图片}
技术分享图片
技术分享图片CShellLinkInfo&?CShellLinkInfo::operator=(const?CShellLinkInfo&?sli)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sTarget?=?sli.m_sTarget;
技术分享图片??m_pidl?=?sli.m_pidl;
技术分享图片??m_sArguments?=?sli.m_sArguments;
技术分享图片??m_sDescription?=?sli.m_sDescription;
技术分享图片??m_wHotkey?=?sli.m_wHotkey;
技术分享图片??m_sIconLocation?=?sli.m_sIconLocation;
技术分享图片??m_nIconIndex?=?sli.m_nIconIndex;
技术分享图片??m_nShowCmd?=?sli.m_nShowCmd;
技术分享图片??m_sWorkingDirectory?=?sli.m_sWorkingDirectory;
技术分享图片
技术分享图片??return?*this;
技术分享图片}
技术分享图片
技术分享图片#ifdef?_DEBUG
技术分享图片void?CShellLinkInfo::Dump(CDumpContext&?dc)
技术分享图片技术分享图片技术分享图片{
技术分享图片??CObject::Dump(dc);
技术分享图片
技术分享图片??dc?<<?_T("\nm_sTarget?=?")?<<?m_sTarget
技术分享图片?????<<?_T("\nm_pidl?=?")?<<?m_pidl
技术分享图片?????<<?_T("\nm_sArguments?=?")?<<?m_sArguments
技术分享图片?????<<?_T("\nm_sDescription?=?")?<<?m_sDescription
技术分享图片?????<<?_T("\nm_wHotkey?=?")?<<?m_wHotkey
技术分享图片?????<<?_T("\nm_sIconLocation?=?")?<<?m_sIconLocation
技术分享图片?????<<?_T("\nm_nIconIndex?=?")?<<?m_nIconIndex
技术分享图片?????<<?_T("\nm_nShowCmd?=?")?<<?m_nShowCmd
技术分享图片?????<<?_T("\nm_sWorkingDirectory?=?")?<<?m_sWorkingDirectory;
技术分享图片}
技术分享图片#endif
技术分享图片
技术分享图片
技术分享图片CShellLink::CShellLink()
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_psl?=?NULL;
技术分享图片??m_ppf?=?NULL;
技术分享图片??m_bAttemptedInitialise?=?FALSE;
技术分享图片}
技术分享图片
技术分享图片CShellLink::~CShellLink()
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(m_ppf)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????m_ppf->Release();
技术分享图片????m_ppf?=?NULL;
技术分享图片??}
技术分享图片??if?(m_psl)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????m_psl->Release();
技术分享图片????m_psl?=?NULL;
技术分享图片??}
技术分享图片}
技术分享图片
技术分享图片BOOL?CShellLink::Initialise()
技术分享图片技术分享图片技术分享图片{
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片??if?(m_bAttemptedInitialise)
技术分享图片????bSuccess?=?(m_psl?!=?NULL);
技术分享图片??else
技术分享图片技术分享图片??技术分享图片{
技术分享图片????//Instantiate?the?COM?class
技术分享图片????HRESULT?hRes?=?::CoCreateInstance(CLSID_ShellLink,?NULL,?CLSCTX_INPROC_SERVER,?IID_IShellLink,?(LPVOID*)?&m_psl);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片技术分享图片????技术分享图片{
技术分享图片??????//Also?get?a?pointer?to?IPersistFile
技术分享图片??????hRes?=?m_psl->QueryInterface(IID_IPersistFile,?(LPVOID*)?&m_ppf);
技术分享图片??????bSuccess?=?SUCCEEDED(hRes);
技术分享图片??????if?(!bSuccess)
技术分享图片????????TRACE(_T("CShellLink::Initialise,?Failed?in?call?to?QueryInterface?for?IPersistFile,?HRESULT?was?%x\n"),?hRes);????????
技术分享图片????}
技术分享图片????else
技术分享图片??????TRACE(_T("CShellLink::Initialise,?Failed?in?call?to?CoCreateInstance?for?IShellLink,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????m_bAttemptedInitialise?=?TRUE;
技术分享图片??}
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片BOOL?CShellLink::Create(const?CShellLinkInfo&?sli)
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??m_sli?=?sli;
技术分享图片
技术分享图片??return?TRUE;
技术分享图片}
技术分享图片
技术分享图片BOOL?CShellLink::Save(const?CString&?sFilename)
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??//Validate?our?parameters
技术分享图片??if?(m_sli.m_pidl?==?NULL)
技术分享图片????ASSERT(!m_sli.m_sTarget.IsEmpty());
技术分享图片??ASSERT(!sFilename.IsEmpty());
技术分享图片??ASSERT(m_psl);
技术分享图片??ASSERT(m_ppf);
技术分享图片
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片??HRESULT?hRes;
技术分享图片
技术分享图片??//Convert?the?path?to?a?UNICODE?string
技术分享图片??WCHAR?wszPath[MAX_PATH];
技术分享图片#ifndef?_UNICODE
技术分享图片??::MultiByteToWideChar(CP_ACP,?0,?sFilename,?-1,?wszPath,?MAX_PATH);
技术分享图片#else
技术分享图片??_tcscpy(wszPath,?sFilename);
技术分享图片#endif
技术分享图片
技术分享图片??//Set?the?various?link?values
技术分享图片??if?(m_sli.m_pidl)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????hRes?=?m_psl->SetIDList(m_sli.m_pidl);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetIDList,?HRESULT?was?%x\n"),?hRes);
技术分享图片??}
技术分享图片??else
技术分享图片技术分享图片??技术分享图片{
技术分享图片????hRes?=?m_psl->SetPath(m_sli.m_sTarget);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetPath,?HRESULT?was?%x\n"),?hRes);
技术分享图片??}
技术分享图片
技术分享图片??hRes?=?m_psl->SetWorkingDirectory(m_sli.m_sWorkingDirectory);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetWorkingDirectory,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetIconLocation(m_sli.m_sIconLocation,?m_sli.m_nIconIndex);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetIconLocation,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetDescription(m_sli.m_sDescription);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetDescription,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetArguments(m_sli.m_sArguments);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetArguments,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetHotkey(m_sli.m_wHotkey);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetHotkey,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetShowCmd(m_sli.m_nShowCmd);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IShellLink::SetShowCmd,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??//Save?the?link?to?file
技术分享图片??hRes?=?m_ppf->Save(wszPath,?TRUE);
技术分享图片??if?(SUCCEEDED(hRes))
技术分享图片????bSuccess?=?TRUE;
技术分享图片??else
技术分享图片????TRACE(_T("CShellLink::Save,?Failed?in?call?to?IPersistFile::Save,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片BOOL?CShellLink::Load(const?CString&?sFilename)
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??//Validate?our?parameters
技术分享图片??ASSERT(!sFilename.IsEmpty());
技术分享图片??ASSERT(m_psl);
技术分享图片??ASSERT(m_ppf);
技术分享图片
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片
技术分享图片??//Convert?the?path?to?a?UNICODE?string
技术分享图片??WCHAR?wszPath[MAX_PATH];
技术分享图片#ifndef?_UNICODE
技术分享图片??::MultiByteToWideChar(CP_ACP,?0,?sFilename,?-1,?wszPath,?MAX_PATH);
技术分享图片#else
技术分享图片??_tcscpy(wszPath,?sFilename);
技术分享图片#endif
技术分享图片
技术分享图片??//Load?the?link?from?file
技术分享图片??HRESULT?hRes?=?m_ppf->Load(wszPath,?STGM_READ);
技术分享图片??if?(SUCCEEDED(hRes))
技术分享图片技术分享图片??技术分享图片{
技术分享图片????//Get?the?various?link?values
技术分享图片????TCHAR?szBuf[_MAX_PATH];
技术分享图片????WIN32_FIND_DATA?fd;
技术分享图片
技术分享图片????hRes?=?m_psl->GetPath(szBuf,?_MAX_PATH,?&fd,?SLGP_UNCPRIORITY);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片??????m_sli.m_sTarget?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetPath,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetIDList(&m_sli.m_pidl);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetIDList,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetWorkingDirectory(szBuf,?_MAX_PATH);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片??????m_sli.m_sWorkingDirectory?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetWorkingDirectory,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetIconLocation(szBuf,?_MAX_PATH,?&m_sli.m_nIconIndex);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片??????m_sli.m_sIconLocation?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetIconLocation,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetDescription(szBuf,?_MAX_PATH);
技术分享图片????if?(SUCCEEDED(hRes))????????????
技术分享图片??????m_sli.m_sDescription?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetDescription,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetArguments(szBuf,?_MAX_PATH);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片??????m_sli.m_sArguments?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetArguments,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetHotkey(&m_sli.m_wHotkey);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetHotkey,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetShowCmd(&m_sli.m_nShowCmd);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IShellLink::GetShowCmd,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????bSuccess?=?TRUE;
技术分享图片??}
技术分享图片??else
技术分享图片????TRACE(_T("CShellLink::Load,?Failed?in?call?to?IPersistFile::Load,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片BOOL?CShellLink::Resolve(CWnd*?pParentWnd,?DWORD?dwFlags)
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??//Validate?our?parameters
技术分享图片??ASSERT(!m_sli.m_sTarget.IsEmpty());
技术分享图片??ASSERT(m_psl);
技术分享图片??ASSERT(m_ppf);
技术分享图片
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片
技术分享图片??//Do?the?actual?link?resolve
技术分享图片??HWND?hWnd?=?NULL;
技术分享图片??if?(pParentWnd)
技术分享图片????hWnd?=?pParentWnd->GetSafeHwnd();
技术分享图片??HRESULT?hRes?=?m_psl->Resolve(hWnd,?dwFlags);
技术分享图片
技术分享图片??if?(SUCCEEDED(hRes))
技术分享图片????bSuccess?=?TRUE;
技术分享图片??else
技术分享图片????TRACE(_T("CShellLink::Resolve,?Failed?in?call?to?IShellLink::Resolve,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片CString?CShellLink::GetPath()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_sTarget;
技术分享图片}
技术分享图片
技术分享图片CString?CShellLink::GetArguments()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_sArguments;
技术分享图片}
技术分享图片
技术分享图片CString?CShellLink::GetDescription()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_sDescription;
技术分享图片}
技术分享图片
技术分享图片WORD?CShellLink::GetHotKey()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_wHotkey;
技术分享图片}
技术分享图片
技术分享图片CString?CShellLink::GetIconLocation()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_sIconLocation;
技术分享图片}
技术分享图片
技术分享图片int?CShellLink::GetIconLocationIndex()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_nIconIndex;
技术分享图片}
技术分享图片
技术分享图片LPITEMIDLIST?CShellLink::GetPathIDList()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_pidl;
技术分享图片}
技术分享图片
技术分享图片int?CShellLink::GetShowCommand()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_nShowCmd;
技术分享图片}
技术分享图片
技术分享图片CString?CShellLink::GetWorkingDirectory()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??return?m_sli.m_sWorkingDirectory;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetPath(const?CString&?sPath)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_sTarget?=?sPath;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetArguments(const?CString&?sArguments)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_sArguments?=?sArguments;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetDescription(const?CString&?sDescription)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_sDescription?=?sDescription;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetHotKey(WORD?wHotkey)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_wHotkey?=?wHotkey;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetIconLocation(const?CString&?sIconLocation)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_sIconLocation?=?sIconLocation;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetIconLocationIndex(int?nIconIndex)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_nIconIndex?=?nIconIndex;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetPathIDList(LPITEMIDLIST?pidl)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_pidl?=?pidl;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetShowCommand(int?nShowCmd)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_nShowCmd?=?nShowCmd;
技术分享图片}
技术分享图片
技术分享图片void?CShellLink::SetWorkingDirectory(const?CString&?sWorkingDirectory)
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_sli.m_sWorkingDirectory?=?sWorkingDirectory;
技术分享图片}
技术分享图片
技术分享图片
技术分享图片CUrlShellLink::CUrlShellLink()
技术分享图片技术分享图片技术分享图片{
技术分享图片??m_pURL?=?NULL;
技术分享图片}
技术分享图片
技术分享图片BOOL?CUrlShellLink::Create(const?CShellLinkInfo&?sli)
技术分享图片技术分享图片技术分享图片{
技术分享图片??//Validate?our?parameters
技术分享图片??ASSERT(sli.m_sArguments.IsEmpty());?//Arguments?are?not?supported?for?Internet?shortcuts
技术分享图片??ASSERT(sli.m_pidl?==?NULL);?????????//pidls?are?not?supported?for?Internet?shortcuts
技术分享图片
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??m_sli?=?sli;
技术分享图片
技术分享图片??return?TRUE;
技术分享图片}
技术分享图片
技术分享图片CUrlShellLink::~CUrlShellLink()
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(m_psl)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????m_psl->Release();
技术分享图片????m_psl?=?NULL;
技术分享图片??}
技术分享图片??if?(m_ppf)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????m_ppf->Release();
技术分享图片????m_ppf?=?NULL;
技术分享图片??}
技术分享图片??if?(m_pURL)
技术分享图片技术分享图片??技术分享图片{
技术分享图片????m_pURL->Release();
技术分享图片????m_pURL?=?NULL;
技术分享图片??}
技术分享图片}
技术分享图片
技术分享图片BOOL?CUrlShellLink::Initialise()
技术分享图片技术分享图片技术分享图片{
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片??if?(m_bAttemptedInitialise)
技术分享图片????bSuccess?=?(m_pURL?!=?NULL);
技术分享图片??else
技术分享图片技术分享图片??技术分享图片{
技术分享图片????//Instantiate?the?COM?class
技术分享图片????HRESULT?hRes?=?::CoCreateInstance(CLSID_InternetShortcut,?NULL,?CLSCTX_INPROC_SERVER,?IID_IUniformResourceLocator,?(LPVOID*)?&m_pURL);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片技术分享图片????技术分享图片{
技术分享图片??????//Also?get?a?pointer?to?IPersistFile
技术分享图片??????hRes?=?m_pURL->QueryInterface(IID_IPersistFile,?(LPVOID*)?&m_ppf);
技术分享图片??????if?(SUCCEEDED(hRes))
技术分享图片技术分享图片??????技术分享图片{
技术分享图片????????//Also?get?a?pointer?to?IShellLink
技术分享图片????????hRes?=?m_pURL->QueryInterface(IID_IShellLink,?(LPVOID*)?&m_psl);
技术分享图片????????if?(SUCCEEDED(hRes))
技术分享图片??????????bSuccess?=?TRUE;
技术分享图片????????else
技术分享图片??????????TRACE(_T("CUrlShellLink::Initialise,?Failed?in?call?to?QueryInterface?for?IShellLink,?HRESULT?was?%x\n"),?hRes);????????
技术分享图片??????}
技术分享图片??????else
技术分享图片????????TRACE(_T("CUrlShellLink::Initialise,?Failed?in?call?to?QueryInterface?for?IPersistFile,?HRESULT?was?%x\n"),?hRes);????????
技术分享图片????}
技术分享图片????else
技术分享图片??????TRACE(_T("CUrlShellLink::Initialise,?Failed?in?call?to?CoCreateInstance?for?IInternetShortcut,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????m_bAttemptedInitialise?=?TRUE;
技术分享图片??}
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片BOOL?CUrlShellLink::Save(const?CString&?sFilename)
技术分享图片技术分享图片技术分享图片{
技术分享图片??USES_CONVERSION;
技术分享图片
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??//Validate?our?parameters
技术分享图片??ASSERT(!sFilename.IsEmpty());
技术分享图片??ASSERT(!m_sli.m_sTarget.IsEmpty());
技术分享图片
技术分享图片??//URL?Links?do?not?support?arguments,?everthing?should?be?
技术分享图片??//included?in?m_sli.m_sTarget?and?m_sli.m_sArguments?should
技术分享图片??//always?be?empty
技术分享图片??ASSERT(m_sli.m_sArguments.IsEmpty());
技术分享图片
技术分享图片??ASSERT(m_pURL);
技术分享图片??ASSERT(m_psl);
技术分享图片??ASSERT(m_ppf);
技术分享图片
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片
技术分享图片??//Convert?the?path?to?a?UNICODE?string
技术分享图片??WCHAR?wszPath[_MAX_PATH];
技术分享图片#ifndef?_UNICODE
技术分享图片??MultiByteToWideChar(CP_ACP,?0,?sFilename,?-1,?wszPath,?_MAX_PATH);
技术分享图片#else
技术分享图片??_tcscpy(wszPath,?sFilename);
技术分享图片#endif
技术分享图片
技术分享图片??//Set?the?various?arguments
技术分享图片??HRESULT?hRes?=?m_pURL->SetURL(m_sli.m_sTarget,?0);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CUrlShellLink::Save,?Failed?in?call?to?IUniformResourceLocator::SetURL,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetIconLocation(m_sli.m_sIconLocation,?m_sli.m_nIconIndex);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CUrlShellLink::Save,?Failed?in?call?to?IShellLink::SetIconLocation,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetDescription(m_sli.m_sDescription);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CUrlShellLink::Save,?Failed?in?call?to?IShellLink::SetDescription,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??hRes?=?m_psl->SetHotkey(m_sli.m_wHotkey);
技术分享图片??if?(!SUCCEEDED(hRes))
技术分享图片????TRACE(_T("CUrlShellLink::Save,?Failed?in?call?to?IShellLink::SetHotkey,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??//Save?the?link?to?file
技术分享图片??hRes?=?m_ppf->Save(wszPath,?TRUE);
技术分享图片??if?(SUCCEEDED(hRes))
技术分享图片????bSuccess?=?TRUE;
技术分享图片??else
技术分享图片????TRACE(_T("CUrlShellLink::Save,?Failed?in?call?to?IPersistFile::Save,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片BOOL?CUrlShellLink::Load(const?CString&?sFilename)
技术分享图片技术分享图片技术分享图片{
技术分享图片??if?(!Initialise())
技术分享图片????return?FALSE;
技术分享图片
技术分享图片??//Validate?our?parameters
技术分享图片??ASSERT(!sFilename.IsEmpty());
技术分享图片??ASSERT(m_pURL);
技术分享图片??ASSERT(m_psl);
技术分享图片??ASSERT(m_ppf);
技术分享图片
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片
技术分享图片??//Convert?the?path?to?a?UNICODE?string
技术分享图片??WCHAR?wszPath[MAX_PATH];
技术分享图片#ifndef?_UNICODE
技术分享图片??::MultiByteToWideChar(CP_ACP,?0,?sFilename,?-1,?wszPath,?MAX_PATH);
技术分享图片#else
技术分享图片??_tcscpy(wszPath,?sFilename);
技术分享图片#endif
技术分享图片
技术分享图片??//Load?the?link?from?file
技术分享图片??HRESULT?hRes?=?m_ppf->Load(wszPath,?STGM_READ);
技术分享图片??if?(SUCCEEDED(hRes))
技术分享图片技术分享图片??技术分享图片{
技术分享图片????//Get?the?various?link?values
技术分享图片????LPTSTR?lpTemp?=?NULL;
技术分享图片????hRes?=?m_pURL->GetURL(&lpTemp);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片技术分享图片????技术分享图片{
技术分享图片??????m_sli.m_sTarget?=?lpTemp;
技术分享图片
技术分享图片??????IMalloc*?pMalloc;
技术分享图片??????hRes?=?SHGetMalloc(&pMalloc);?
技术分享图片??????if?(SUCCEEDED(hRes))
技术分享图片技术分享图片??????技术分享图片{
技术分享图片????????pMalloc->Free(lpTemp);
技术分享图片????????pMalloc->Release();
技术分享图片??????}
技术分享图片????}
技术分享图片????else
技术分享图片??????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IUniformResourceLocator::GetURL,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????TCHAR?szBuf[_MAX_PATH];
技术分享图片????hRes?=?m_psl->GetWorkingDirectory(szBuf,?_MAX_PATH);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片??????m_sli.m_sWorkingDirectory?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IShellLink::GetWorkingDirectory,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetIconLocation(szBuf,?_MAX_PATH,?&m_sli.m_nIconIndex);
技术分享图片????if?(SUCCEEDED(hRes))
技术分享图片??????m_sli.m_sIconLocation?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IShellLink::GetIconLocation,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????//WINBUG:?URL?shortcuts?always?seem?to?return?a?desciption?the?same?as?the?name?of
技术分享图片????//file?in?which?the?shortcut?is?stored
技术分享图片????hRes?=?m_psl->GetDescription(szBuf,?_MAX_PATH);
技术分享图片????if?(SUCCEEDED(hRes))????????????
技术分享图片??????m_sli.m_sDescription?=?szBuf;
技术分享图片????else
技术分享图片??????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IShellLink::GetDescription,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetHotkey(&m_sli.m_wHotkey);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IShellLink::GetHotkey,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????hRes?=?m_psl->GetShowCmd(&m_sli.m_nShowCmd);
技术分享图片????if?(!SUCCEEDED(hRes))
技术分享图片??????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IShellLink::GetShowCmd,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片????bSuccess?=?TRUE;
技术分享图片??}
技术分享图片??else
技术分享图片????TRACE(_T("CUrlShellLink::Load,?Failed?in?call?to?IPersistFile::Load,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片BOOL?CUrlShellLink::Invoke(CWnd*?pParentWnd,?DWORD?dwFlags,?const?CString&?sVerb)
技术分享图片技术分享图片技术分享图片{
技术分享图片??//Validate?our?parameters
技术分享图片??ASSERT(!m_sli.m_sTarget.IsEmpty());
技术分享图片??ASSERT(m_pURL);
技术分享图片??ASSERT(m_psl);
技术分享图片??ASSERT(m_ppf);
技术分享图片
技术分享图片??BOOL?bSuccess?=?FALSE;
技术分享图片
技术分享图片??URLINVOKECOMMANDINFO?urlicmi;
技术分享图片??urlicmi.dwcbSize?=?sizeof(URLINVOKECOMMANDINFO);
技术分享图片??urlicmi.dwFlags?=?dwFlags;??
技术分享图片??urlicmi.hwndParent?=?NULL;
技术分享图片??if?(pParentWnd)
技术分享图片????urlicmi.hwndParent?=?pParentWnd->GetSafeHwnd();??????????
技术分享图片??urlicmi.pcszVerb?=?sVerb;
技术分享图片
技术分享图片??//Invoke?the?verb?on?the?URL
技术分享图片??HRESULT?hRes?=?m_pURL->InvokeCommand(&urlicmi);
技术分享图片??if?(SUCCEEDED(hRes))
技术分享图片????bSuccess?=?TRUE;
技术分享图片??else
技术分享图片????TRACE(_T("CUrlShellLink::Invoke,?Failed?in?call?to?IUniformResourceLocator::Invoke,?HRESULT?was?%x\n"),?hRes);
技术分享图片
技术分享图片??return?bSuccess;
技术分享图片}
技术分享图片
技术分享图片技术分享图片void?CUrlShellLink::SetArguments(const?CString&?/**//*sArguments*/)
技术分享图片技术分享图片技术分享图片{
技术分享图片??//Arguments?are?not?supported?for?Internet?shortcuts
技术分享图片??ASSERT(FALSE);?
技术分享图片}
技术分享图片
技术分享图片CString?CUrlShellLink::GetArguments()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??ASSERT(FALSE);??//Arguments?are?not?supported?for?Internet?shortcuts
技术分享图片??return?CString();
技术分享图片}
技术分享图片
技术分享图片LPITEMIDLIST?CUrlShellLink::GetPathIDList()?const
技术分享图片技术分享图片技术分享图片{
技术分享图片??//pidls?are?not?supported?for?Internet?shortcuts
技术分享图片??ASSERT(FALSE);?
技术分享图片??return?NULL;
技术分享图片}
技术分享图片
技术分享图片技术分享图片void?CUrlShellLink::SetPathIDList(LPITEMIDLIST?/**//*pidl*/)
技术分享图片技术分享图片技术分享图片{
技术分享图片??//pidls?are?not?supported?for?Internet?shortcuts
技术分享图片??ASSERT(FALSE);?
技术分享图片}
技术分享图片
技术分享图片
技术分享图片

IShellLink接口的MFC封装类

原文:https://blog.51cto.com/phinecos/3272435

(0)
(0)
   
举报
评论 一句话评论(0
分享档案
最新文章
教程昨日排行
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!