修改网络映射磁盘的方法

      相信很多人都一直希望能够修改网络映射磁盘的Lable,但伤心的是使用SetVolumValue不可用,其仅适用于本地磁盘的Label修改。

 

      修改网络磁盘的方法可以采用注册表的形式,这里该方法就不拿来说明,网上很容易找到的。

 

      这里提供一种采用COM 的API方式来修改:

     

void RenameDrive(BSTR strNewName, BSTR strDriveLetter)
{
   IShellDispatch* pShellDispatch = NULL;

   if ( SUCCEEDED( CoInitialize(NULL) ) )
   {
	   // 如果成功初始化COM库,则继续初始化并运行应用程序...
	   // 对于Win32应用程序, CoInitialize函数的pvReserved参数,必须为NULL. 此参数不能被用于32位COM,      
	   // CoInitialize将会返回E_INVALIDARG,如果传递一个非NULL参数.
   }
   else
   {
	   // 如果初始化COM库失败,则退出.
   }

   HRESULT hr = CoCreateInstance(CLSID_Shell,
                                 NULL,
                                 CLSCTX_INPROC_SERVER,
                                 IID_IShellDispatch,
                                 (void**)&pShellDispatch);
   if (SUCCEEDED(hr) && pShellDispatch)
   {
      Folder* pFolder = NULL;
      VARIANT vt = {};
      VariantInit(&vt);
      vt.vt = VT_BSTR;
      vt.bstrVal = strDriveLetter;
      hr = pShellDispatch->NameSpace(vt, &pFolder);
      VariantClear(&vt);
      if (SUCCEEDED(hr) && pFolder)
      {
         Folder2* pFolder2 = NULL;
         hr = pFolder->QueryInterface(IID_Folder2, (void**)&pFolder2);
         if (SUCCEEDED(hr) && pFolder2)
         {
            FolderItem* pFolderItem = NULL;
            hr = pFolder2->get_Self(&pFolderItem);
            if (SUCCEEDED(hr) && pFolderItem)
            {
               pFolderItem->put_Name(strNewName);
               pFolderItem->Release();
            }
            pFolder2->Release();
         }

         pFolder->Release();
      }

      pShellDispatch->Release();

	  CoUninitialize();
   }
}

 

    测试代码:

   

int _tmain(int argc, _TCHAR* argv[])
{
	BSTR bstrLabel = ::SysAllocString( L"TestLabel" );

	if (bstrLabel == NULL)

		return E_OUTOFMEMORY;

	BSTR bstrLetter = ::SysAllocString( L"Z:" );

	if (bstrLetter == NULL)

		return E_OUTOFMEMORY;

	RenameDrive(bstrLabel, bstrLetter);

	::SysFreeString( bstrLabel );
	::SysFreeString( bstrLetter );
	return 0;
}

    

   OK

   转载请注明出处:

   http://yiranwuqing.iteye.com/blog/1825349

你可能感兴趣的:(window编程)