共有サーバなどネットワーク上にあるExcelやテキスト等のファイルは、
『\\FileServer\売上\2011年.xlsx』
のように、コンピュータ名を含めたパス付のファイル名とすることで、Delphi/400から利用できます。
しかし環境によっては、アクセス時にユーザー名とパスワードの入力を求められることがあります。
今回はその認証をVCLプログラムから行い、サーバへ接続する方法をご紹介します。
認証が必要な場合には、APIのWNetAddConnection2関数を利用します。
APIの詳細については、マイクロソフトの記事をご参照ください。
(WNetAddConnection2W 関数 (winnetwk.h) – Win32 apps | Microsoft Learn)
https://learn.microsoft.com/ja-jp/windows/win32/api/winnetwk/nf-winnetwk-wnetaddconnection2w
以下は対象のサーバへWNetAddConnection2を使って接続する例です。
(接続先、ユーザー名、パスワードは今回はEditの値を使用する想定です。)
//例)
procedure TForm1.BitBtn1Click(Sender: TObject);
var
NetResource: TNetResource; // 接続に使用する構造体
unc: string; // 接続先
username: string; // ユーザー名
password: string; // パスワード
iRes: Integer; // 関数の戻り値を保持
begin
unc := LabeledEdit1.Text; // 接続先(例:'\\FileServer\売上\')
username := LabeledEdit2.Text; // ユーザー名
password := LabeledEdit3.Text; // パスワード
// 接続の詳細を構造体に設定
with NetResource do
begin
dwType := RESOURCETYPE_DISK; // 接続先ネットワーク資源の種類
lpLocalName := nil;
lpRemoteName := PChar(unc); // 接続先名
lpProvider := nil;
end;
// 接続処理
iRes := WNetAddConnection2
(NetResource, // 構造体
PChar(password), // パスワード
PChar(username), // ユーザー名
0);
if (iRes = NO_ERROR) then
begin
// 接続成功
ShowMessage(unc + ':接続しました。');
end
else
begin
// 接続失敗
ShowMessage(unc + ':接続失敗。エラーコード=' + IntToStr(iRes));
end;
end;
※WNetAddConnection2関数は、
内部的にはWNetAddConnection2Wが呼び出されます。
ANSI環境で呼び出す必要がある場合は、関数名をWNetAddConnection2Aとし、
引数に使われているStringやPCharを全てAnsiStringやPAnsiCharに読み替えて下さい。