Pregunta

Estoy montando una unidad de red a Windows usando WNetAddConnection2 que está trabajando bien, pero mientras que el montaje de la unidad por defecto se asigna el nombre como IP del servidor y NombreCarpeta,

NDSTestFolder en 'servidor NAS (172.24.17.116)' (R:)

Necesito cambiar el nombre de la etiqueta de la unidad utilizando SetVolumeLabel pero esto no funciona para la unidad de red diciendo parámetro no válido mientras que SetVolumeLabel funciona bien para las unidades locales.

¿Hay alguna manera de cambiar el nombre o etiquetar una unidad de red? De modo que pueda cambiar

NDSTestFolder en 'servidor NAS (172.24.17.116)' (R:)

a

NDS @ MiCarpeta (R:)

¿Fue útil?

Solución

Traducción su script en C ++:

#include <shldisp.h>

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

   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();
   }
}

Otros consejos

No está seguro de si hay una API para esto, pero las cadenas se almacenan en el registro bajo:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ MountPoints2

Para la subclave correcta mediante el análisis de las teclas de allí (que probablemente se verá como "## 172.24.17.116 # NDSTestFolder") y cambie el valor _LabelFromReg a lo que quiera ...

He intentado utilizar VB script para cambiar el nombre de la unidad:

LPCTSTR szCode = "Function RenameDrive(strNewName,strDriveLetter) \r\n\
                     Dim objShell \r\n\
                     Set objShell = CreateObject(\"Shell.Application\") \r\n\
                     'if objShell is Not Nothing Then \r\n\
                     objShell.NameSpace(strDriveLetter).Self.Name = strNewName \r\n\
                     'End if \r\n\
                     End Function";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top