Как переименовать или переименовать метку сетевого диска - PullRequest
1 голос
/ 16 декабря 2010

Я монтирую сетевой диск в Windows, используя WNetAddConnection2 , который работает нормально, но при монтировании диска по умолчанию ему присваивается имя как IP-адрес сервера и имя папки,

NDSTestFolder на сервере NAS (172.24.17.116) (R:)

Мне нужно переименовать метку диска, используя SetVolumeLabel , но это не удается для сетевого диска, сообщающего неверный параметр, в то время как SetVolumeLabel отлично работает для локальных дисков.

Есть ли способ, которым я могу переименовать или переименовать сетевой диск? Так что я могу изменить

NDSTestFolder на сервере NAS (172.24.17.116) (R:)

до

NDS @ MyFolder (R:)

Ответы [ 3 ]

3 голосов
/ 27 декабря 2010

Перевод вашего скрипта на 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();
   }
}
1 голос
/ 16 декабря 2010

Не уверен, что для этого есть API, но строки хранятся в реестре по адресу:

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

Найдите правильный подразделпроанализировав там ключи (вероятно, это будет выглядеть как "## 172.24.17.116 # NDSTestFolder") и измените значение _LabelFromReg на то, что вам нравится ...

0 голосов
/ 27 декабря 2010

Я пытался использовать скрипт vb для переименования диска:

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";
...