134 lines
3.3 KiB
C++
134 lines
3.3 KiB
C++
|
//+----------------------------------------------------------------------------
|
||
|
//
|
||
|
// File: loadconnfolder.cpp
|
||
|
//
|
||
|
// Module: CMSTP.EXE
|
||
|
//
|
||
|
// Synopsis: This source file contains the code that implements the
|
||
|
// CLoadConnFolder Class.
|
||
|
//
|
||
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
//
|
||
|
// Author: quintinb Created 07/14/98
|
||
|
//
|
||
|
//+----------------------------------------------------------------------------
|
||
|
#include "cmmaster.h"
|
||
|
|
||
|
CLoadConnFolder::CLoadConnFolder()
|
||
|
{
|
||
|
ULONG ulCount;
|
||
|
|
||
|
// "CLSID_MyComputer\CLSID_ControlPanel\CLSID_ConnectionsFolder"
|
||
|
// Note -- ParseDisplayName() is miss declared, it should take a const ptr
|
||
|
//
|
||
|
#define NETCON_FOLDER_PATH L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\" \
|
||
|
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\" \
|
||
|
L"::{7007acc7-3202-11d1-aad2-00805fc1270e}";
|
||
|
|
||
|
WCHAR c_szMyFolderName[] = NETCON_FOLDER_PATH;
|
||
|
|
||
|
//
|
||
|
// Set initial states of class vars
|
||
|
//
|
||
|
|
||
|
m_pConnectionsFolder = NULL;
|
||
|
m_ConnFolderpidl = NULL;
|
||
|
m_pDesktopFolder = NULL;
|
||
|
m_HrClassState = E_UNEXPECTED;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Start retrieving the conn folder
|
||
|
//
|
||
|
|
||
|
m_HrClassState = CoInitialize(NULL);
|
||
|
|
||
|
//
|
||
|
// Save whether CoInit succeeded or not
|
||
|
//
|
||
|
m_CoInit = SUCCEEDED(m_HrClassState);
|
||
|
|
||
|
if (SUCCEEDED(m_HrClassState))
|
||
|
{
|
||
|
//
|
||
|
// Get the desktop folder, so we can parse the display name and get
|
||
|
// the UI object of the connections folder
|
||
|
//
|
||
|
|
||
|
m_HrClassState = SHGetDesktopFolder(&m_pDesktopFolder);
|
||
|
if (SUCCEEDED(m_HrClassState))
|
||
|
{
|
||
|
m_HrClassState = m_pDesktopFolder->ParseDisplayName(NULL, 0, (WCHAR *) c_szMyFolderName,
|
||
|
&ulCount, &m_ConnFolderpidl, NULL);
|
||
|
if (SUCCEEDED(m_HrClassState))
|
||
|
{
|
||
|
//
|
||
|
// Now we have the pidl for the Connections Folder
|
||
|
//
|
||
|
m_HrClassState = m_pDesktopFolder->BindToObject(m_ConnFolderpidl, NULL, IID_IShellFolder,
|
||
|
(LPVOID*)(&m_pConnectionsFolder));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
CLoadConnFolder::~CLoadConnFolder()
|
||
|
{
|
||
|
if (m_pConnectionsFolder)
|
||
|
{
|
||
|
m_pConnectionsFolder->Release();
|
||
|
m_pConnectionsFolder = NULL;
|
||
|
}
|
||
|
|
||
|
if (m_pDesktopFolder)
|
||
|
{
|
||
|
m_pDesktopFolder->Release();
|
||
|
m_pDesktopFolder = NULL;
|
||
|
}
|
||
|
|
||
|
if (m_ConnFolderpidl)
|
||
|
{
|
||
|
LPMALLOC pMalloc;
|
||
|
HRESULT hr = SHGetMalloc(&pMalloc);
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
pMalloc->Free(m_ConnFolderpidl);
|
||
|
pMalloc->Release();
|
||
|
m_ConnFolderpidl = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (m_CoInit)
|
||
|
{
|
||
|
CoUninitialize();
|
||
|
}
|
||
|
|
||
|
m_HrClassState = S_FALSE;
|
||
|
|
||
|
}
|
||
|
|
||
|
HRESULT CLoadConnFolder::HrLaunchConnFolder()
|
||
|
{
|
||
|
SHELLEXECUTEINFO sei;
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (NULL != m_ConnFolderpidl)
|
||
|
{
|
||
|
ZeroMemory(&sei, sizeof(sei));
|
||
|
sei.cbSize = sizeof(sei);
|
||
|
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
||
|
sei.lpIDList = m_ConnFolderpidl;
|
||
|
sei.lpClass = TEXT("folder");
|
||
|
sei.hwnd = NULL; //lpcmi->hwnd;
|
||
|
sei.nShow = SW_SHOWNORMAL;
|
||
|
sei.lpVerb = TEXT("open");
|
||
|
|
||
|
if (!ShellExecuteEx(&sei))
|
||
|
{
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
}
|
||
|
}
|
||
|
return hr;
|
||
|
}
|