Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】認証が必要なサーバへのアクセス

共有サーバなどネットワーク上にある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に読み替えて下さい。

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.136 2012年3月号より)