Cómo cambiar el nombre o etiquetar una etiqueta de unidad de red
-
10-10-2019 - |
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:)
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";