大伙們住運用delphi 軟件編寫網絡應用程序軟件代碼時可能會遇到此樣1個問題和疑問:住1個由Windows NT及Novell Netware組成地網絡環境中,應用程序軟件代碼需需要使用Novell網頂地某些數據,假如每次都手工住Windows資源管理器中映射,斷開網絡驅動器,非僅繁瑣而且顯得非夠專業。本文將介紹住delphi 軟件中使用Windows32 API函數function解決此1問題和疑問。
1、 基本原理
住Microsoft Windows環境下,應用程序軟件代碼使用Windows網絡函數function(WNet)來實現寫出來網絡功能而非用關心網絡地供應商及具體實現寫出來。原因是WNet函數function就為獨立於網絡地。
Wnet函數function主需要有:WnetAddConnection , WnetAddConnection2 , WnetAddConnection3 , WnetCancelConnection2等。本文主需要用WnetAddConnection2,WnetCancelConnection2函數function,下面簡單介紹1下,關於WNet函數function更詳細地資料請參考delphi 軟件地連機文檔及Microsoft API函數function說。
WNetAddConnection2住Windows.pas中地函數function原型如下:
function WNetAddConnection2
(var lpNetResource: TNetResource;
lpPassword, lpUserName: PChar; dwFlags:
DWORD): DWORD; stdcall;
為調用此函數function必須填寫
lpNetResouce結構,此結構地定義設置為:
typedef struct _NETRESOUCE{
DWORD dwScope;
DWORD dwType;
DWORD dwDisplayType;
DWORD dwUsage;
LPTSTR lpLocalName;
LPTSR lpRemoteName;
LPTSr lpProvider;
} NETRESOURCE;
此里使用dwType,lpLocalName,lpRemoteName,
lpProvider幾個參數。其含義如下:
dwType : 用於指定網絡地資源類型,
有以下RESOURCETYPE_ANY(任何資源) ,
RESOURCETYPE_DISK(磁盤資源) ,
RESOURCETYPE_PRINT(打印機資源)。
lpLocalName : 指定本地設備。
lpRemoteName : 指定遠程網絡名。
lpProvider : 指定提供網絡資源地供應商。
如為空,則表示供應商未知。
WNetAddConnection2函數function地
lpPassword為遠程資源地口令。
lpUserName為遠程資源地用戶名。
dwFlags標志位用於指定登錄時就為否重新連接
(0時表示非重新連接,CCONNECT_UPDATE_
PROFILE登錄時重新連接)。
WnetCancelConnection2住Windows.pas
中地函數function原型如下:
function WNetCancelConnection2
(lpName: PChar; dwFlags: DWORD; fForce: BOOL):
DWORD; stdcall;
lpName : 需要斷開地 掏繾試椿蟣鏡刂囟ㄏ蚯鰲?dwFlags : 含義同頂。
fForce : True表示非管就為否有文件打開,
強制性斷開網絡驅動器;False 表示如有文
件打開則函數function運行失敗。
二、實例
住delphi 軟件地File菜單下選擇New Application,住Form1頂放置1個Button,住Button1地Click事件中鍵入如下編程代碼(Code):
procedure TForm1.Button1Click
(Sender : TObject);
var
NetSource : TNetResource;
begin
with NetSource do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := X:;
// 將遠程資源映射到此驅動器
lpRemoteName := \\hqServer\sys;
// 遠程網絡資源
lpProvider := ; // 必須賦值,
如為空則使用lpRemoteName地值。
end;
WnetAddConnection2(NetSource, Password, Guest,
//用戶名為Guest,口令為Password
CONNECT_UPDATE_PROFILE);
//下次登錄時重新連接
//此時住Windows資源管理器中可看到網絡驅動器X:
if MessageDlg(Are you sure to disconnect Drive ?,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
//非管就為否有文件打開,斷開網絡驅動器X:
WNetCancelConnection2
( X:, CONNECT_UPDATE_PROFILE, True);
end;
end;