Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+----------------------------------------------------------------------------
//
// 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; }
|