ネットワークドライブとして使われているLAN上のパソコンやNASなどから公開されているフォルダから切断するにはWNetDisconnectDialog1を利用する。
依存環境:ATL#include <atlstr.h>
#pragma comment(lib,"Mpr.lib")
//
// ネットワークドライブの切断
//
//bDisconnectKeepはfalseだとWindowsを再起動すると接続が回復する
//
bool NetDriveDisconnect(LPCTSTR pszLocalName,LPCTSTR pszRemoteName,bool bDisconnectKeep=false)
{
DWORD dwRet;
DISCDLGSTRUCT sDiscdlgStruct;
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(&sDiscdlgStruct,sizeof(DISCDLGSTRUCT));
sDiscdlgStruct.cbStructure = sizeof(DISCDLGSTRUCT);
sDiscdlgStruct.hwndOwner = NULL;
sDiscdlgStruct.lpLocalName = strLocal.GetBuffer(0);
sDiscdlgStruct.lpRemoteName = strRemote.GetBuffer(0);
sDiscdlgStruct.dwFlags = (bDisconnectKeep) ? DISC_UPDATE_PROFILE | DISC_NO_FORCE : DISC_NO_FORCE;
dwRet = ::WNetDisconnectDialog1(&sDiscdlgStruct);
return (dwRet == NO_ERROR) ? true : false;
}
void Test(void)
{
bool ret;
ret = NetDriveDisconnect(_T("r:"),_T("\\\\192.168.11.151\\share"));
if(ret)
::MessageBox(NULL,_T("切断しました"),_T(""),MB_OK);
else
::MessageBox(NULL,_T("失敗しました"),_T(""),MB_OK);
}
