[StructLayout(LayoutKind.Sequential)]
public class NETRESOURCE
{
public int dwScope;
public int dwType;
public int dwDisplayType;
public int dwUsage;
public string LocalName;
public string RemoteName;
public string Comment;
public string Provider;
}
[DllImport("mpr.dll", EntryPoint = "WNetAddConnection2")]
public static extern uint WNetAddConnection2(
[In] NETRESOURCE lpNetResource,
string lpPassword,
string lpUsername,
uint dwFlags);
[DllImport("Mpr.dll")]
public static extern uint WNetCancelConnection2(
string lpName,
uint dwFlags,
bool fForce);
調用例子
NETRESOURCE myNetResource = new NETRESOURCE();
myNetResource.dwScope = 2; //2:RESOURCE_GLOBALNET
myNetResource.dwType = 1; //1:RESOURCETYPE_ANY
myNetResource.dwDisplayType = 3; //3:RESOURCEDISPLAYTYPE_GENERIC
myNetResource.dwUsage = 1; //1: RESOURCEUSAGE_CONNECTABLE
myNetResource.LocalName = "T:";
myNetResource.RemoteName = @"\\10.72.27.22\test";
myNetResource.Provider = null;
uint nret = WNetAddConnection2(myNetResource, "tt", "tt", 0);
刪除映射網絡驅動器調用的代碼如下:
uint nret = WNetCancelConnection2( yourNetDriveName, 1, true);
其中關鍵技術是調用了兩個Windows API函數WNetAddConnection2和WNetCancelConnection2,下面分別加以介紹:
1、WNetAddConnection2
其作用是創建一個同網絡資源的連接,當調用成功時函數返回0。其參數說明如下:
lpNetResource:數據類型是結構NETRESOURCE,該結構中的各個字段對要連接的網絡資源進行了定義,包括遠程計算機共享文件夾的名字(如圖2所示,在“遠程共享文件夾”文本框中的“\\1.1.1.1\share”),以及本地系統為網絡驅動器分配的盤符“X:”,等等;
lpPassword:數據類型為string,該參數是個可選參數,用來設置網絡密碼,對應本程序控件Text3中的文本。如果該參數的值等於vbNullString,則表示采用系統當前登錄用戶的默認密碼;如果是一個空字符串,則表示不需要任何密碼就可訪問網絡資源;
lpUserName:數據類型為string,指定用於網絡連接的用戶名,對應本程序控件Text2中的文本。如果該參數的值等於vbNullString,則表示使用系統當前的登錄用戶名;
dwFlags:數據類型為long,該參數可以設為0,也可以指定常量CONNECT_UPDATE_PROFILE(表示創建永久性的網絡連接)。
2、WNetCancelConnection2
其作用是斷開一個網絡連接,當調用成功時函數返回0。其參數說明如下:
lpName:數據類型是string,用來指定已連接資源的遠程名稱或本地名稱,具體在本文中就是給遠程共享文件夾分配的盤符:“X:”;
dwFlags:數據類型為long,可以取兩個值,0或CONNECT_UPDATE_PROFILE,如果為0,而且建立的網絡連接是永久性連接,則在Windows下次重新啟動時仍會重新連接;
fForce:數據類型為long,如果為True,那麼,即使連接的網絡資源上有正在打開的文件或作業,也強制斷開網絡連接,這樣就會造成數據的丟失、不完整性,建議將該參數的值設為False,如程序中所做。