LAN上のパソコンやNASなどから公開されているフォルダをドライブとして接続するにはWNetAddConnection2を使う。この関数はネットワークプリンタの接続にも利用できるものだが今回は使い方をネットワークドライブに限定している。
依存環境:ATL#include <atlstr.h>
#pragma comment(lib,"Mpr.lib")
//
// ネットワークドライブの割り当て
//
//bConnectionKeepはfalseだとWindowsを再起動すると接続は回復しない
//
bool NetDriveConnect(LPCTSTR pszLocalName,LPCTSTR pszRemoteName,bool bConnectionKeep=false)
{
DWORD dwRet;
DWORD dwFlags;
NETRESOURCE sNetResource;
CAtlStringA strLocal;
CAtlStringA strRemote;
strLocal = pszLocalName;
strRemote = pszRemoteName;
//pszLocalNameは「z:」のようにする。末尾は「:」にする
if(strLocal.Right(1) != ':')
strLocal += ":";
// pszRemoteNameは「\\\\192.168.11.151\\share」のようにする。末尾を「\\」にするのはNG
if(strRemote.Right(1) == '\\')
strRemote = strRemote.Left(strRemote.GetLength() - 1);
ZeroMemory(&sNetResource,sizeof(NETRESOURCE));
sNetResource.dwType = RESOURCETYPE_DISK;
sNetResource.lpLocalName = strLocal.GetBuffer(0);
sNetResource.lpRemoteName = strRemote.GetBuffer(0);
dwFlags = (bConnectionKeep) ? CONNECT_UPDATE_PROFILE : 0;
dwRet = ::WNetAddConnection2(&sNetResource,NULL,NULL,dwFlags);
return (dwRet == NO_ERROR) ? true : false;
}
void Test(void)
{
bool ret;
ret = NetDriveConnect(_T("r:"),_T("\\\\192.168.11.151\\share"));
if(ret)
::MessageBox(NULL,_T("接続しました"),_T(""),MB_OK);
else
::MessageBox(NULL,_T("失敗しました"),_T(""),MB_OK);
}
