Delphiによるネットワークドライブのマッピングと切断

4773 ワード


p>Delphiを使用してネットワークアプリケーションを作成する場合、Windows NTとNovell Netwareからなるネットワーク環境では、Novellネットワークのデータを使用する必要があります.毎回手動でWindowsエクスプローラにマッピングし、ネットワークドライブを切断すると、煩雑で専門的ではありません.ここではDelphiでWindows 32 API関数を使用してこの問題を解決する方法について説明します.
一、基本原理
Microsoft Windows環境では、アプリケーションはWindowsネットワーク関数(WNet)を使用して、ネットワークのベンダーや具体的な実装に関心を持たずにネットワーク機能を実現します.WNet関数はネットワークとは独立しているからです.
Wnet関数には、主にWnetAddConnection、WnetAddConnection 2、WnetAddConnection 3、WnetCancelConnection 2などがあります.本文は主にWnetAddConnection 2,WnetCancelConnection 2関数を用いているが,以下簡単に紹介するが,WNet関数の詳細についてはDelphiの接続ドキュメントとMicrosoft API関数を参照して説明する.
WNetAddConnection 2はWindowsにあります.pasの関数のプロトタイプは次のとおりです.

function WNetAddConnection2
(var lpNetResource: TNetResource;
lpPassword, lpUserName: PChar; dwFlags: 
DWORD): DWORD; stdcall;

          
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   
lpPassword        。
 lpUserName         。
dwFlags                
(0        ,CCONNECT_UPDATE_
PROFILE       )。
WnetCancelConnection2 Windows.pas
        :
function WNetCancelConnection2
(lpName: PChar; dwFlags: DWORD; fForce: BOOL): 
DWORD; stdcall;
lpName :                ㄏ  ?
dwFlags :     。
fForce : True           ,
          ;False      
           。

二、実例
DelphiのFileメニューから「New Application」を選択し、Form 1にButtonを配置し、Button 1のClickイベントに次のコードを入力します.

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;

このプログラムはDelphi 3.0,4.0、PWIndows 95、Novell Netware 3.12でコンパイルが実行されます.
 
 
 
例2、
現在、delphiの応用はますます広範になり、ネットワークは将来のコンピュータの発展傾向である.本文はdelphiの中でどのようにネットワークドライブのマッピングを実現する小さい技巧を紹介して、ソースプログラムは以下の通りです:map-network-drive.pas  procedure tform1.button1click(sender:tobject);  varnr:tnetresource;  beginwith nr do  begindwtype:=resourcetype__any;lplocalname:=`x:';//map to this driver letterlpremotename:=`//myserver\mydirectory';//must be filled in.lpprovider:=";  end;  wnetaddconnection2(nr,`mypassword',`myuername',  connect__update__profile);  end;